详解设计模式——抽象工厂模式

来源:互联网 发布:java集合框架详解 编辑:程序博客网 时间:2024/06/05 10:51

抽象工厂模式(Abstract Factory)

为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。

抽象工厂是工厂模式的升级版,他用来创建一组相关或者相互依赖的对象。来看下抽象工厂模式的类图:

上节学习了工厂模式,类的创建依赖工厂类,程序需要扩展时,我们必须创建新的工厂类。工厂类是用来生产产品的,那我们也可以把工厂类当成我们要生产的产品,所以抽象工厂就是工厂的工厂,即生产工厂的工厂。下面通过一个例子来深入理解。

通过一个例子,来加深对抽象工厂的理解。

1.  //CPU工厂接口

2.  publicinterfaceCPUFactory{

3.      publicvoid createCPU();

4.  }

1.  //IntelCPU工厂

2.  publicclassIntelCPUimplementsCPUFactory{

3.      @Override

4.      publicvoid createCPU(){

5.          System.out.println("Intel CPU");

6.      }

7.  }

1.  //AMDCPU工厂

2.  publicclass AMDCPUimplementsCPUFactory{

3.      @Override

4.      publicvoid createCPU(){

5.          System.out.println("AMD CPU");

6.      }

7.  }

1.  //创建抽象工厂类接口

2.  publicinterfaceProvider{

3.      publicCPUFactory createCPUFactory();

4.  }

1.  publicclassInterCPUFactoryimplementsProvider{

2.      @Override

3.      publicCPUFactory createCPUFactory(){

4.          returnnewInterCPU();

5.      }

6.  }

1.  publicclassAMDCPUFactoryimplementsProvider{

2.      @Override

3.      publicCPUFactory createCPUFactory(){

4.          returnnew AMDCPU();

5.      }

6.  }

1.  publicstaticvoid main(String[] args){

2.          //创建一个生产CPU工厂的工厂

3.          Provider cpufactory=newInterCPUFactory();

4.          //通过CPU工厂的工厂创建一个IntelCPU工厂

5.          CPUFactory intelcpu= cpufactory.createCPUFactory();

6.          //IntelCPU工厂生产intelCPU

7.          intelcpu.createCPU();

8.           }

抽象工厂的优点:

抽象工厂模式除了具有工厂方法模式的优点外,最主要的优点就是可以在类的内部对产品族进行约束。所谓的产品族,一般或多或少的都存在一定的关联(例如不同厂商生产CPU)。

适用场景:

一个继承体系中,如果存在着多个等级结构(即存在着多个抽象类),并且分属各个等级结构中的实现类之间存在着一定的关联或者约束,就可以使用抽象工厂模式。