1。采用Factory method、Builder和Abstract Factory模式可以分离接口和具体实现,本文通过类比讨论三者间的差异。
下面举例说明三者间的差异,其中客户相当于模式使用者,商家相当于模式本身: 1. Factory method类似购买品牌机,客户可以选择联想或DELL,商家的模式是提供各类品牌整机; 2. Builder类似购买组装机,商家的模式是商家提供配件,并按客户提要求装机,最后商家提供机器(得到一台整机); 3. Abstract Factory类似DIY,用户根据价格(比如分高中低三个价位,每个价位一套最优配置)选择一套配件,(得到一套配件)。
2。Factory method和Abstract Factory模式区别:
虽然两种模式表面看来都是用来创建对象的,Abstract Factory创建一组products, Factory Method只创建一个product,但这并不意味着Factory Method只是Abstract Factory在只有一个product时的特例。
(以下把Abstract Factory模式简称为AF,把Factory Method简称为FM)
AF的适用性在设计模式一书中解释如下:
一个系统要独立于它的产品的创建、组合和表示时;
一个系统要由多个产品系列中的一个来配置的时候;
当你要强调一系列相关的产品对象的设计以便进行联合使用时;
当你提供一个产品类库,而只想显示它们的接口而不是实现时。
FM的适用性在设计模式一书中解释如下:
当一个类不知道它所创建的对象的类的时候;
当一个类希望由它的子类来指定它所创建的对象的时候;
当类创建对象的职责委托给多个帮助子类中的某一个, 并且你希望将"哪一个帮助子类是代理者"这一信息局部化的时候。
因此,不同主要在于:
(1)应用环境不同:FM中创建者的职责并不仅限于创建对象,而AF通常只有创建对象这一职责。
(2)实现方式不同:FM是实现继承,抽象类实现大部分操作,通常仅将对象的创建工作延迟到子类来完成;AF是接口继承,抽象类通常不实现任何功能,仅仅定义一系列接口,子类实现抽象类定义的接口。
(3)工厂方法可以说成template method在创建对象上面的应用,目的是封装具体创建哪个对象;而抽象工厂是为了创建一“系列”的产品,抽象工厂通常用工厂方法来实现从而封装了具体创建哪个产品系列。抽象工厂可以通过一系列工厂方法实现。
3。template mothod vs strategy
这两个模式的相同之处在于它们可以使算法和上下文解耦,不同之处在于一个是使用继承来解决问题,另一个是基于委托。 而且strategy是对于整个算法的,template是针对算法的具体步骤的。
4。Proxy模式和Strategy模式
Adapter模式和代理模式(Proxy)都是在对象间构造一个简单的层。然而,Adapter模式向对象提供一个不同的接口,代理模式(Proxy)为对象提供相同的接口。
posted on 2006-07-25 11:09
保尔任 阅读(454)
评论(0) 编辑 收藏 所属分类:
Design Patten