下一页 1 2 3 4 5
工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态。其中简单工厂模式和工厂方法模式已经在前面作过介绍。在这里,我们来介绍抽象工厂模式。
抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的一种形态。
抽象工厂模式的定义
抽象工厂模式是工厂方法模式的进一步扩广化和抽象化。我们给出抽象工厂模式的类图定义如下。
图1. 抽象工厂模式的类图定义
从上图可以看出,简单工厂模式涉及到以下的角色
抽象工厂(AbstractFactory)类或接口
担任这个角色的是工厂方法模式的核心,它是与应用程序无关的。任何在模式中创立对象的工厂类必须实现这个接口,或继承这个类。
实工厂类 (Conrete Factory)
担任这个角色的是与应用程序紧密相关的,直接在应用程序调用下,创立产品实例的那样一些类。
抽象产品 (Abstract Product)
担任这个角色的类是工厂方法模式所创立的对象的父类,或它们共同拥有的接口。
实产品 (Concrete Product)
担任这个角色的类是工厂方法模式所创立的任何对象所属的类。
怎么这个类图和工厂方法模式的类图看起来是一样的?
是的,图是一样的,但是含义有很大的不同。必须指出,在抽象工厂模式中,抽象产品 (AbstractProduct) 可能是一个或多个,从而构成一个或多个产品族(Product Family)。 在只有一个产品族的情况下,抽象工厂模式实际上退化到工厂方法模式。在上面的类图中,只给出了一个产品族,相当于位图中的一个点,而完整的位图应当是三维的,如下图。
图2. 抽象工厂模式的位图
从位图可以清楚地看到,与纸面垂直的数轴,即第三维轴,是代表产品族的数轴。上面的位图中展示的是有两个产品族,族A和族B的情形。
在只有一个产品族时,第三维就坍缩掉,位图也就只剩下两维。这时抽象工厂模式就退化得与工厂方法模式一模一样。