锁定老帖子 主题:难以理解的工厂方法模式
精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-12
我手头倒是就有一个一定要使用工厂方法的例子,希望能对你有帮助,是在java核心技术上发现的,通过工厂方法来格式化数据,比如以货币及百分比方式显示数据的时候:NumberFormat.getCurrencyInstance()及NumberFormat.getPercentInstance()返回相同类型(NumberFormat)的对象实例,在使用的时候可以使货币对象及百分比对象具有不同的名字,比构造器灵活啊.另外,通过工厂方法不但可以返回当前类型的对象,还可以返回子类的对象,这点也有些特别呢. |
|
返回顶楼 | |
发表时间:2007-03-13
我们只着眼于工厂方法,诚然,极端的情况下,我们可以将系统中所有需要new 出来的对象,XXClass xx = new XXClass()这样的代码放到工厂方法中,然后提供一个getXXClass()方法给需要这个对象的系统使用,那么当我们需要修改创建方式的情况下,我们是不是可以只修改Factory中的代码就可以了?当工厂模式与其他模式结合使用,或者,我们使用抽象工厂模式,更进一步,我们使用抽象工厂模式外加Builder模式,我们就形成了一个从创建产品系列(Factory功能),到包装或组装产品系列(Builder功能),我们是不是可以在这几处地方修改代码?对于我们系统以后的维护来说,是不是就要简单和方便呢?
在合适的情况下使用了正确的创建模式,以上的回答,我们都可以说"Yeah" |
|
返回顶楼 | |
发表时间:2007-03-13
还是要在实践中获得知识,书本上说的工厂方法的好处,不久就忘记了。
|
|
返回顶楼 | |
发表时间:2007-03-13
factory method例子:
public static Boolean valueOf(boolean b) { return (b ? Boolean.TRUE : Boolean.FALSE); } 他的好处是方法可以自己定义名称。 另外一个好处是可以返回子类。 缺点也有,主要看什么时候用了。 详细见《Effective java》Chapter 2. Creating and Destroying Objects |
|
返回顶楼 | |
发表时间:2007-03-13
引用 不是CSDN不好,只是不习惯CSDN的鱼龙混杂。
CSDN版块全而多,但是精贴率少,和javaeye是不同的方向。 究其原因,是板斧管的松。若严了,会拒绝掉很多人,就成了javaeye了。 |
|
返回顶楼 | |
发表时间:2007-03-15
dovecat 写道 我们只着眼于工厂方法,诚然,极端的情况下,我们可以将系统中所有需要new 出来的对象,XXClass xx = new XXClass()这样的代码放到工厂方法中,然后提供一个getXXClass()方法给需要这个对象的系统使用,那么当我们需要修改创建方式的情况下,我们是不是可以只修改Factory中的代码就可以了?当工厂模式与其他模式结合使用,或者,我们使用抽象工厂模式,更进一步,我们使用抽象工厂模式外加Builder模式,我们就形成了一个从创建产品系列(Factory功能),到包装或组装产品系列(Builder功能),我们是不是可以在这几处地方修改代码?对于我们系统以后的维护来说,是不是就要简单和方便呢?
在合适的情况下使用了正确的创建模式,以上的回答,我们都可以说"Yeah" 很奇怪,为什么你会认为使用new的时候,就得修改两个类呢? 你肯定没有仔细看我发的帖子。 我没有讨论抽象工厂,这完全是两码事。 你所说其他情况,你对照着我发的帖子,你不用工厂也是一样的。 |
|
返回顶楼 | |
发表时间:2007-03-15
经常用到自然是简单工厂模式,需要传递一个参数给工厂,返回一个产品。简单的工厂最大的问题就在于需要传递一个参数,才能得获得所需要的产品,对于产品是确定的情况,那自然用简单工厂模式就足够了,但是要考虑到考虑扩展的情况,就需要一个平级的扩展,自然就需要分别对工厂和产品同时抽象,保证了系统框架的稳定性。
这也是我的个人之见,平时用得最多的还是简单工厂模式,不过工厂模式中最不明白的就是抽象工厂模式,就明白一个产品族的概念,但在实际的项目中,好像比较少用到,不知道哪位老大可以举一个具体的应用场景,好了解了解 |
|
返回顶楼 | |
发表时间:2007-03-16
The reason to use Factory is to centralize the object creation. So in the factory you can do something which is applicable to the application, such as
1. Enhancing the object with cglib; 2. Swap the impementation on the fly; etc. If the object generation is scattered in the code, and you need to add some function applicable to the a type of classes, then you have to modify all the codes. Factory pattern will resolve this issue. Of couse AOP could also help, but AOP is not the right way . Centralizing control is the soul of the Factory of pattern |
|
返回顶楼 | |
发表时间:2007-05-07
书随便看看就行了。关键还是会用。
多写几个框架,消除所有的重复味道的代码,模式就出来了。 什么effective系列之类的,都只能算是入门书。对于编程时间较长而又有领悟能力的程序员来说不值一提。别把它当什么经典。 |
|
返回顶楼 | |
发表时间:2007-05-08
其实你是完全理解错了工厂模式的作用了,分析以下情况,当一个用户登陆时,假如他需要一个系统服务,如果目前有客服在线的话,那么可以返回一个与客服通信的类,否则应该给一个系统默认的服务类,在这种情况下,使用工厂模式就能有非常好的效果了,你可以通过系统目前的服务情况,动态的返回不同的对象,而用户并不需要知道服务他的是哪种对象.
使用工厂模式的原理在于:用户并不知道什么对象被创建,而是根据目前系统所需而创建.且在以后需要提供其他服务对象时,仅需修改一下工厂类的对象返回即可. |
|
返回顶楼 | |