您的位置:首页 > 其它

Hibernate框架设计模式:工厂模式

2017-03-15 10:07 381 查看
工厂模式:是一种类创建模型,适用于在创建多个复杂对象的时候(在不同情况下创建不同对象)。

工厂模式一般分为以下两种:

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐