在WIKI中重新看了一下抽象工厂模式(http://en.wikipedia.org/wiki/Abstract_factory),其中有一句关于 工厂 的信息特别有重要:
In software development, a Factory is the location in the code at which objects are constructed. The intent in employing the pattern is to insulate the creation of objects from their usage. This allows for new derived types to be introduced with no change to the code that uses the base class.
再次强调下 工厂 的相关信息:
1。工厂用于生成实例
工厂可以生成多种多样的实例了,具体生成什么实例,调用方不需要知道(调用方不就是为了这个效果吗?!效果是什么?代码隔离,减少复杂度)
2。调用方代码与实例生成代码 隔离
我个人的理解,这里的隔离最终还是为了第一点:不需要考虑生成什么实例了。不隔离怎么保证生成实例对调用方透明呢?!
这一点在我以前的BLOG有说明。
3。虽然是不同的实例返回,但调用方不需要为此作更改。
通过继承,虚拟的方式实现这一功能
所以,当你准备使用工厂模式时,可以拿这三点对照一下。
抽象工厂模式与工厂模式有什么不同,先看看UML图
Abstract Factory:
从UML图看,它从Factory要复杂的多,一般的工厂模式UML图如下:
抽象工厂在上图的 FactoryCreator 部分又增加了一层,把工厂也做了一次抽象。
一般,一个工厂生产的产品,如果类型很简单(如:面包店,生成不同种类的面包),则只需要一个工厂(面包工厂),就可以了
而抽象工厂的模式要解决: 当工厂也存在许多不同的种类时 一种方法。
如上面的例子,现在我们要增加不同的面包生厂工厂,就变为如下:
所以,抽象工厂其实只是工厂模式的一个增强,可以理解为:在一个简单工厂模式上面再加一个工厂模式。如上面的例子,如果,在全国各地都有工厂,那就需要再加一个工厂了:
呵呵,现在,已经绝对的是:一个工厂上面再加一个工厂了!!