设计模式--工厂方法

来源:互联网 发布:小学音乐教学软件 编辑:程序博客网 时间:2024/06/02 07:47

工厂方法

原文:http://www.vincehuston.org/dp/factory_method.html

定义:

定义产生对象的接口,而是让它的子类去决定应实例化哪个类。工厂方法让类的实例化转移到了子类中去。

定义一个"virtual"构造方法。

问题:

       在一定范围内的应用程序中,一个框架就需要有一个标准化的模块来提供程序的实例化,除了允许个别的程序自己去定义属于他们的对象。

结构说明:

1、  使用策略模式来代替”New”操作,来构造对象。

2、  XYZ基类中定义”MakeXYZ”方法,返回一个XYZ的抽象类型实例。

3、  每一个继承基类的类实现一个构造方法,并返回自己类型的实例。

讨论:

工厂方法创建对象如同模板方法实现一个运算法则。超类指定了所有的标准和一般行为(使用”virtual”,然后委派子类(由客户端指定的类)去完成构造细节。

工厂方法的这种设计有更多的自定义性,稍微有一点复杂,其他设计模式需要新的类,但是工厂方法只需要”New”操作。

人们经常使用工厂方法作为创建对象的基本方法。但它并不是必须的,如果:被实例化的类从不改变,或实例化发生在一个操作中,而且子类很容易覆写他(例如在初始操作中)。

工厂方法类似于抽象工厂,只是它的重点不是产品族。

工厂方法的执行由框架来指定,然后由框架的用户来实现。


结构:sc

工厂方法中较为流行的一种做法是用一个静态方法,并返回对象类型(抽象类型)。它不同于构造函数,返回的实际对象可能是自类的实例,可能是已存在的对象。工厂方法有不同和更多的描述名称。如Color.make_RGB_color(float red, float green, float blue) and Color.make_HSB_color(float hue, float saturation, float brightness

.客户端在衍生类的实现细节上被完全削弱了,这就使多态性成为可能。

 

经验:

抽象工厂经常由工厂方法来实现,但也能用原型模式来实现。

工厂方法经常在模板方法中使用。

工厂方法:通过继承来产生。 原型模式:通过委托来产生。

原型模式不需要子类化,但在初始操作中需要。工厂方法需要子类化,并不需要初始操作。

高级的工厂方法在调用多次后能够返回同一个实例,或返回一个子类,而不是准确类型的对象。

 “New”永远创建对象,而不能封装对象创建。工厂方法进行封装,允许一个对象被请求,而不需要和实际创建耦合。

 

 
原创粉丝点击