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

 

posted @ 2023-02-21 20:53  平凡的人生不平凡的梦  阅读(23)  评论(0)    收藏  举报