Factory Pattern
1.简单工厂(不符合开闭原则):不支持增加产品
public class SimpleFactory{
public static A create(String type){
//所有生产方法均在工厂里面
if("Asub1".equals(type))return new Asub1();
if("Asub2".equals(type))return new Asub2();
} }
使用:
A asub1=SimpleFactory.create("Asub1");
A asub2=SimpleFactory.create("Asub2");
2.工厂方法:
支持增加产品:在AFactory里增加createB即可
不支持增加产品族
public abstract class AFactory{
public abstract A createA();
}
//具体生产方法的类Asub1Factory和Asub2Factory
public class Asub1Factory extends AFactory{
@Override
public A createA(){
return new Asub1();
} }
public class Asub2Factory extends AFactory{
@Override
public A createA(){
return new Asub2();
} }
使用:
A a1=new Asub1Factory().createA();
A a2=new Asub2Factory().createA();
3.抽象工厂:
不方便增加产品,当AbstractFactory增加C createC()时,子类都要跟着实现createC();当然可以将createC做成非抽象方法,有默认实现即可
支持增加产品族:只需再定义一个Sub3Factory生产第三个产品族即可
public abstract class AbstractFactory{
A createA();
B createB();
}
具体生产方法的实现类Sub1Factory和Sub2Factory
public class Sub1Factory extends AbstractFactory{
public A createA(){
return new Asub1();}
public B createB(){
return new Bsub1();}
}
public class Sub2Factory extends AbstractFactory{
public A createA(){
return new Asub2();}
public B createB(){
return new Bsub2();}
}
使用:
Sub1Factory sub1Factory=new Sub1Factory();
sub1Factory.createA();sub1Factory.createB();//创建第一个产品族,包含Asub1和Bsub1
Sub2Factory sub2Factory=new Sub2Factory();
sub2Factory.createA();sub2Factory.createB();//创建第二个产品族,包含Asub2和Bsub2
浙公网安备 33010602011771号