“工厂方法”跟“抽象工厂”有些相似,这一点从名称上也是可以看出来的。“抽象工厂”主要是说生产一个系列的产品的工厂类,而“工厂方法”则是说生产一个产品的方法,我们完全可以把“抽象工厂”当作是一群“工厂方法”组合而成的,事实上,“抽象工厂”模式常常建立在“工厂方法”模式的基础上。
好了,来看一个例子。广本的冲压科里面,有几台巨型的冲压机,它们外观是一摸一样的,其实功能也一样,都是用来将钢板冲压成型的,但它们生产的产品却不一样,有的生产车顶,有的生产车门,有的生产发动机盖……冲压机的生产厂家不会管你生产什么东西的,只是给你这样一台冲压机,要生产什么完全由你自己放进不同的模具而已。也就是说,广本要某台冲压机生产Fit的车门的话,只需要将Fit的车门模具放入其中就可以了,冲压机不会管什么模具的,只管哐当哐当的压就是了。
来看一个类图。
图中,我们可以看到,拥有不同模具的冲压机可以生产不同的产品。而且,冲压机在投入生产之前并不知道它要生产什么东西,只有在给定了模具后才知道要生产什么东西。好了,我们来看看把类图转换成代码的样子。
FactoryMethod
说白了,抽象工厂就是由工厂方法组成的(这个表达也许不够准确)。抽象工厂主要用于创建一系列相关的产品;而工厂方法则主要用于让某一个类处理不同的产品,且这个产品是由子类来决定的。在冲压机的例子中,没有模具的冲压机就是一个抽象类,加上模具就是一个具体的子类的,而模具的抽象就是工厂方法,加上不同的模具就等于为冲压机实现了不同的子类。
回到目录
上一篇:Builder
下一篇:Prototype