Hibernate框架设计模式:工厂模式
2017-03-15 10:07
381 查看
工厂模式:是一种类创建模型,适用于在创建多个复杂对象的时候(在不同情况下创建不同对象)。
工厂模式一般分为以下两种:
1.简单工厂模式:在工厂类定义创建不同对象实例的方法,在需要使用对象的地方,通过创建工厂并给出需要的对象名称来获取对象实例。
例如:车是一个大类,具体的车对象的父类都是车类,所以设定一个车工厂类,通过不同的车对象名称,创建并获取对应车对象,然后就可以通过具体的车对象调用与之对应的方法。
Car.java:
测试类:在测试类中创建工厂,通过工厂获取对应名称的车对象,并能够调用车对象的方法。
package com.factory.cls;
public class Test {
public static void main(String[] args) {
FactoryCar factory = new FactoryCar();
Car car = factory.getCar("BMW");
car.run();
}
}
2.抽象工厂模式:工厂的工厂。例如:在上面1中Car简单工厂的基础上还有color工厂,在这时,就需要创建一个抽象工厂,用于抽象出根据需求获取对应车对象和获取对应颜色对象的方法,并且还应该有一个工厂创建工具类,用于根据需求创建颜色工厂还是车工厂对象,具体如下:
AbstractFactory.java:抽象工厂
package com.factory.cls;
public abstract class AbstractFactory {
abstract Car getCar(String carName);
abstract Color getColor(String colorName);
}
FactoryCar.java:车工厂
package com.factory.cls;
public class FactoryCar extends AbstractFactory{
@Override
Color getColor(String colorName) {
// TODO Auto-generated method stub
return null;
}
@Override
Car getCar(String carName) {
if(carName == null){
return null;
}
if("QQ".equals(carName)){
return new QQ();
}else if("BMW".equals(carName)){
return new BMW();
}
return null;
}
}FactoryColor.java:颜色工厂
package com.factory.cls;
public class FactoryColor extends AbstractFactory{
@Override
Car getCar(String carName) {
// TODO Auto-generated method stub
return null;
}
@Override
Color getColor(String colorName) {
if(colorName == null){
return null;
}
if("blue".equals(colorName)){
return new Blue();
}else if("red".equals(colorName)){
return new Red();
}
return null;
}
}
Car.java:
package com.factory.cls;
public interface Car
4000
{
void run();
}Color.java:
package com.factory.cls;
public interface Color {
void createColor();
}
QQ.java:
package com.factory.cls; public class QQ implements Car{ @Override public void run() { System.out.println("QQ车在跑"); } }
BMW.java:
package com.factory.cls;
public class BMW implements Car{
private int age;
@Override
public void run() {
System.out.println("BMW车在跑");
}
}
Red.java:
package com.factory.cls;
public class Red implements Color{
@Override
public void createColor() {
// TODO Auto-generated method stub
System.out.println("红色");
}
}
Blue.java:
package com.factory.cls;
public class FactoryBuilder {
public static AbstractFactory getFactory(String factoryName){
if("car".equals(factoryName)){
return new FactoryCar();
}else if("color".equals(factoryName)){
return new FactoryColor();
}
return null;
}
}
测试类:通过工厂创建工具类调用静态方法getFactory创建对应工厂,通过工厂创建并获取对应对象,再通过对象调用各自方法。
工厂模式一般分为以下两种:
1.简单工厂模式:在工厂类定义创建不同对象实例的方法,在需要使用对象的地方,通过创建工厂并给出需要的对象名称来获取对象实例。
例如:车是一个大类,具体的车对象的父类都是车类,所以设定一个车工厂类,通过不同的车对象名称,创建并获取对应车对象,然后就可以通过具体的车对象调用与之对应的方法。
Car.java:
package com.factory.cls; public interface Car { void run(); }BMW.java:
package com.factory.cls; public class BMW implements Car{ @Override public void run() { System.out.println("BMW车在跑"); } }QQ.java:
package com.factory.cls; public class QQ implements Car{ @Override public void run() { System.out.println("QQ车在跑"); } }FactoryCar:车工厂类
package com.factory.cls; public class FactoryCar{ public Car getCar(String carName) { if(carName == null){ return null; } if("QQ".equals(carName)){ return new QQ(); }else if("BMW".equals(carName)){ return new BMW(); } return null; } }
测试类:在测试类中创建工厂,通过工厂获取对应名称的车对象,并能够调用车对象的方法。
package com.factory.cls;
public class Test {
public static void main(String[] args) {
FactoryCar factory = new FactoryCar();
Car car = factory.getCar("BMW");
car.run();
}
}
2.抽象工厂模式:工厂的工厂。例如:在上面1中Car简单工厂的基础上还有color工厂,在这时,就需要创建一个抽象工厂,用于抽象出根据需求获取对应车对象和获取对应颜色对象的方法,并且还应该有一个工厂创建工具类,用于根据需求创建颜色工厂还是车工厂对象,具体如下:
AbstractFactory.java:抽象工厂
package com.factory.cls;
public abstract class AbstractFactory {
abstract Car getCar(String carName);
abstract Color getColor(String colorName);
}
FactoryCar.java:车工厂
package com.factory.cls;
public class FactoryCar extends AbstractFactory{
@Override
Color getColor(String colorName) {
// TODO Auto-generated method stub
return null;
}
@Override
Car getCar(String carName) {
if(carName == null){
return null;
}
if("QQ".equals(carName)){
return new QQ();
}else if("BMW".equals(carName)){
return new BMW();
}
return null;
}
}FactoryColor.java:颜色工厂
package com.factory.cls;
public class FactoryColor extends AbstractFactory{
@Override
Car getCar(String carName) {
// TODO Auto-generated method stub
return null;
}
@Override
Color getColor(String colorName) {
if(colorName == null){
return null;
}
if("blue".equals(colorName)){
return new Blue();
}else if("red".equals(colorName)){
return new Red();
}
return null;
}
}
Car.java:
package com.factory.cls;
public interface Car
4000
{
void run();
}Color.java:
package com.factory.cls;
public interface Color {
void createColor();
}
QQ.java:
package com.factory.cls; public class QQ implements Car{ @Override public void run() { System.out.println("QQ车在跑"); } }
BMW.java:
package com.factory.cls;
public class BMW implements Car{
private int age;
@Override
public void run() {
System.out.println("BMW车在跑");
}
}
Red.java:
package com.factory.cls;
public class Red implements Color{
@Override
public void createColor() {
// TODO Auto-generated method stub
System.out.println("红色");
}
}
Blue.java:
package com.factory.cls; public class Blue implements Color{ @Override public void createColor() { // TODO Auto-generated method stub System.out.println("蓝色"); } }FactoryBuilder.java:工厂创建工具类,用于根据名称创建车工厂对象还是颜色工厂对象。
package com.factory.cls;
public class FactoryBuilder {
public static AbstractFactory getFactory(String factoryName){
if("car".equals(factoryName)){
return new FactoryCar();
}else if("color".equals(factoryName)){
return new FactoryColor();
}
return null;
}
}
测试类:通过工厂创建工具类调用静态方法getFactory创建对应工厂,通过工厂创建并获取对应对象,再通过对象调用各自方法。
package com.factory.cls; public class Test { public static void main(String[] args) { AbstractFactory factory = FactoryBuilder.getFactory("car"); Car car = factory.getCar("QQ"); factory = FactoryBuilder.getFactory("color"); Color color = factory.getColor("blue"); color.createColor(); car.run(); } }
相关文章推荐
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- Retrofit 框架设计+构建者+工厂模式高级应用
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- 通过学习spring优秀框架来学习设计模式---单例、工厂
- C#--抽象工厂设计模式--三层框架
- 万能游戏框架(一)——设计模式之工厂模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- Android开发框架/库学习,设计模式之工厂模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- Retrofit框架设计-构建者+工厂模式高级应用
- Net框架中的设计模式之Builder(构造者)--兼谈抽象工厂和composite模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- Android框架设计模式(二)——(抽象)工厂模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
- Net框架中的设计模式之Builder(构造者)--兼谈抽象工厂和composite模式
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式