Welcome

首页 / 软件开发 / 数据结构与算法 / 设计模式学习——抽象工厂

设计模式学习——抽象工厂2016-02-25简介:

当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产[1] 品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。

每一个模式都是针对一定问题的解决方案,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式针对的是多个产品等级结构。(摘自百度百科)

话语说得太抽象,程序员最好的表示方式是code,当然,我们先用uml类图来直观认识。

UML类图:

从上面的类图中,能够看到,有两个产品族,分别是抽象产品1和抽象产品2这两个产品族,每个具体工厂可以生产多个产品族的产品,比如具体产品1既生产具体产品11,也生产具体产品21。

产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族。比如在上图中,具体产品11和具体产品12组成一个产品族。

代码剖析:

//产品族1interface AbstractProduct1{} class Product11 implements AbstractProduct1{ public Product11(){ System.out.println("生产了产品11"); }}class Product12 implements AbstractProduct1{ public Product12(){ System.out.println("生产了产品12"); }}//产品族2interface AbstractProduct2{} class Product21 implements AbstractProduct2{ public Product21(){ System.out.println("生产了产品21"); }}class Product22 implements AbstractProduct2{ public Product22(){ System.out.println("生产了产品22"); }} interface AbstractFactory{ AbstractProduct1 createP1();//生产产品族1的产品 AbstractProduct2 createP2();//生产产品族2的产品}//具体工厂1,由具体工厂1自己决定生产每个产品族的哪一个产品class Factory1 implements AbstractFactory{ public AbstractProduct1 createP1(){ return new Product11(); } public AbstractProduct2 createP2(){ return new Product21(); }}//具体工厂2,由具体工厂2自己决定生产每个产品族的哪一个产品class Factory2 implements AbstractFactory{ public AbstractProduct1 createP1(){ return new Product12(); } public AbstractProduct2 createP2(){ return new Product22(); }}