论坛首页 Java企业应用论坛

难以理解的工厂方法模式

浏览 18604 次
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-08  
weiqingfei 写道
dovecat 写道
我们只着眼于工厂方法,诚然,极端的情况下,我们可以将系统中所有需要new 出来的对象,XXClass xx = new XXClass()这样的代码放到工厂方法中,然后提供一个getXXClass()方法给需要这个对象的系统使用,那么当我们需要修改创建方式的情况下,我们是不是可以只修改Factory中的代码就可以了?当工厂模式与其他模式结合使用,或者,我们使用抽象工厂模式,更进一步,我们使用抽象工厂模式外加Builder模式,我们就形成了一个从创建产品系列(Factory功能),到包装或组装产品系列(Builder功能),我们是不是可以在这几处地方修改代码?对于我们系统以后的维护来说,是不是就要简单和方便呢?
在合适的情况下使用了正确的创建模式,以上的回答,我们都可以说"Yeah"


很奇怪,为什么你会认为使用new的时候,就得修改两个类呢?
你肯定没有仔细看我发的帖子。

我没有讨论抽象工厂,这完全是两码事。

你所说其他情况,你对照着我发的帖子,你不用工厂也是一样的。

你没明白我的意思,不过前面几位回帖已经说的很清楚了.
0 请登录后投票
   发表时间:2007-07-08  
工厂方法一般的出现形态是这样的:
public voic xx(){
...
createProduct();//调用工厂方法
...
}

abstract protected Product createProduct();

工厂方通常不会被client调用,而是由xx()方法自己消化,我把他叫"自产自消",这一点是跟其他创建模式最大的区别.所以一般工厂方法都是定义为protected.

下面这些代码是来自一个通用树构造组件里的,可以参考下.
http://www.iteye.com/topic/98668
0 请登录后投票
   发表时间:2007-07-09  
GOF 的Design pattern 里对Factory Pattern 是这么写的

Use the Factory Method pattern when

1. a class can't anticipate the class of objects it must create.

2. a class wants its subclasses to specify the objects it creates.

3. classes delegate responsibility to one of several helper subclasses, and you want to localize the knowledge of which helper subclass is the delegate.

我想这应该是讲的很清楚了, 以我个人的经验factory pattern更多是用在几个接口与他们各自依赖于RUN TIME TYPE的子类所构成的体系, 在Template method 里也有运用
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics