| |
| 对《Java与模式》中工厂方法模式的异议 |
| |
发布者: 发布时间:2007-11-26 |
|
|
|
关于工厂方法的一点讨论,我们知道工厂方法属于类型创建模式,而抽象工厂属于对象创建模式,并且所谓的类创建模式就是把创建工作延迟到子类,而对象创建模式则将延迟到另一个对象。 并且设计模式中指出,类模式处理类和子类子间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来。对象模式则处理对象之间的关系,是动态的,运行时刻是可以变化的,更具动态性。 工厂方法由于属于类型创建模式,因此它的创建工作由子类完成,而不是使用对象进行创建,并且在《设计模式》中工厂方法的动机一节有一个示例,它的类大致如下://抽象产品,可以是接口或者抽象类public abstract class document {public void open(){..............................}public void close(){..............................}public void save();}//具体的产品,public class Mydocument extends document{public void open(){...........................}...............}我们工厂方法public abstract class appliaction {//该方法是工厂方法,由子类实现public abstract document createDocument();//模板方法,在方法中使用了工厂方法pubic void newDocument(){//使用工厂方法,获得doc,而实际有子类完成,//这里可以看出,对象的创建,是通过继承来实现,是静态的,编译时已经确定//而不是通过对象的委托来实现,故属于类创建型模式Document doc=createDocument();doc.open();....................doc.save();}} 具体的工厂实现由子类来实现工厂方法:public class myappliaction extends appliaction {public document createDocument(){return new Mydocument();}} 大家可以看出,这其实使用template method模式,抽象方法声明创建对象,而模板方法完成业务逻辑,她使用抽象创建方法,由继承来获得产品,而不是使用对象来创建对象的。 并且大家仔细看<设计模式>71页的结构图,里的creator里有两个方法,其中一个使用factorymethod方法,另外一个就是普通的方法,anOperation它调用了工厂方法,product=factorymethod()来获得产品对象。 现在问题就出现在这里,而另外一本书阎宏的《java与模式》的167地结构图中却没有把这点作出标记,并且提供的示例,也不像最初<设计模式>中的工厂方法的例子,他的示例如下://抽象工厂,而这里却没有方法使用工厂方法:public interface Creator{/*** 工厂方法*/public Product factory();}public class ConcreteCreator1 implements Creator{/*** 工厂方法*/public Product factory(){return new ConcreteProduct1();}}而客户端却使用;public static void main(String[] args){creator1 = new ConcreteCreator1();prod1 = creator1.factory();} 我感觉这样示例有问题,或者不妥,或者不能表达原意。 在客户端,他的对象创建使用了 prod1 = creator1.factory(); 这样显然使用对象creator1来创建对象的,而不是使用继承,类模式来完成创建的。这与工厂方法的原意,类模式,把创建工厂延迟到子类实现,等有冲突。 这样想对象创建模式。
|
| (转载文章请保留出处:北天JAVA技术网(www.java114.com)) |
| |
| 更多精彩文章: |
| Junit 中的设计模式 |
| JUnit设计模式分析及简化的JUnit代码 |
| 建造灵活与可维护的J2EETM 应用程序的设计模式 |
| Singleton 模式在 Java 中的应用 |
| J2EE设计模式浅谈(二)之Filter |
| Adapter模式在J2SE事件处理中的应用 |
| |
| 最近评论: |
|
|
| 鍥炲 |
|
|
|
| 那个雨天的想法! |
| wow gold,wow power leveling.wow power leveling,wow power leveling,
max(5987) |
|
|
| 如果真的有来生! |
| 四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游,
max(4599) |
|
|
| 如果真的有来生! |
| 四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游,
max(346) |
|
|
| 如果真的有来生! |
| 四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游,
max(637) |
|
|
| 左边的风景! |
| wow gold,wow power leveling.wow power leveling,wow power leveling,
max(7552) |
|
|
| 轻轻走过你的窗前! |
| world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold, max(9659) |
|
|
| 轻轻走过你的窗前! |
| world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(5570) |
|
|
| 不在的哪天! |
| final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,
max(22) |
|
|
| 快乐情人节! |
| wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap.
max(6421) |
|
|
| |
| 免责声明:该文章由网友发表,如果对您造成侵权,请联系站长。 |
|