分享
 
 
 

对《Java与模式》中工厂方法模式的异议

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

关于工厂方法的一点讨论,我们知道工厂方法属于类型创建模式,而抽象工厂属于对象创建模式,并且所谓的类创建模式就是把创建工作延迟到子类,而对象创建模式则将延迟到另一个对象。

并且设计模式中指出,类模式处理类和子类子间的关系,这些关系通过继续建立,是静态的,在编译时刻便确定下来。对象模式则处理对象之间的关系,是动态的,运行时刻是可以变化的,更具动态性。

工厂方法由于属于类型创建模式,因此它的创建工作由子类完成,而不是使用对象进行创建,并且在《设计模式》中工厂方法的动机一节有一个示例,它的类大致如下:

//抽象产品,可以是接口或者抽象类

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来创建对象的,而不是使用继续,类模式来完成创建的。这与工厂方法的原意,类模式,把创建工厂延迟到子类实现,等有冲突。

这样想对象创建模式。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有