工厂三姐妹

来源:互联网 发布:华东石油大学网络教育 编辑:程序博客网 时间:2024/04/28 16:15

简单工厂:

简单工厂是一个工厂且只有一条生产线,比如一个生产车的简单工厂,它只有一条生产线,就是造车。或者大话设计上的计算器例子,这个简单工厂只用一条生产线,要么生产加法,要么减法,要么乘法,要么除法,但是只有这一条生产线且只能生产其中一种运算符即只做一件事。


简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖,但是若要增加其他的运算符比如m的n次方,就要修改运算类工厂,在switch中添加分支,其每一次扩展时都要更改工厂类,对修改开放了,不符合开闭原则。


工厂方法

定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂模式使一个类的实例化延迟到其子类。工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单工厂的内部逻辑判断移到了客户端代码来进行。你想要加功能,本来是改工厂类的,而现在是修改客户端了,这样就解决了简单工厂不能满足开闭原则的弊端。当再想加一个m的n次方运算时,只需要添加一个m的n次方工厂类和它的运算类就可以了。

简单工厂是工厂方法的极端化。工厂方法是简单工厂模式的进一步抽象和推广。

一个简单工厂模式的工厂类,变成了一个工厂抽象接口和多个具体生成对象的工厂。工厂方法是由简单工厂自动化而来的,工厂方法是一个工厂有好几条生产线,工厂方法可以看做是由几个简单工厂构成,就拿计算器的例子来说,工厂方法就是一个工厂有好几个流水线,有生产加法的,生产减法的,生产乘法的,生产除法的。


抽象工厂

提供一个创建一系列或相关依赖对象的接口,而无需指定它们具体的类。

抽象工厂是由几个工厂方法自动化构成,工厂方法是抽象工厂的极端化。

简单工厂是一个工厂只有一条生产线,就生产车。而工厂方法是一个工厂有几条生产线,可以生产汽车,电动车,自行车。抽象工厂则可以看成是由能生产好几种品牌车、每个品牌又都有好几种类型车的几个工厂的合成。大话设计上还有个例子,为满足各种不同类型的数据库SQLsever,Access等对user,Department的操作,每个数据库都要能对各个表进行操作(工厂方法),而这里又有好几种数据库都具有此功能(抽象工厂)。



由此看出,简单工厂就好比封建社会的手工生产,自给自足,一条生产线。工厂方法就是后来发展的一个小工厂,雇佣多个工人,多条生产线。而抽象工厂就好比现在的加盟连锁店,拥有多家店面。简单工厂的进步一扩大变成了工厂方法,再由工厂方法进一步扩大变成了抽象工厂。也可以说简单工厂是工厂方法的极端化,工厂方法又是抽象工厂的极端化。除简单工厂外的工厂方法和抽象工厂都是依次自动化而来。

0 0
原创粉丝点击