转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
对《Java与模式》中工厂方法模式的异议         ★★★★

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

作者:闵涛 文章来源:闵涛的学习笔记 点击数:595 更新时间:2009/4/22 23:27:45
  关于工厂方法的一点讨论,我们知道工厂方法属于类型创建模式,而抽象工厂属于对象创建模式,并且所谓的类创建模式就是把创建工作延迟到子类,而对象创建模式则将延迟到另一个对象。

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

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

//抽象产品,可以是接口或者抽象类
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来创建对象的,而不是使用继承,类模式来完成创建的。这与工厂方法的原意,类模式,把创建工厂延迟到子类实现,等有冲突。

  这样想对象创建模式。


[网页制作]JavaScript的三种消息框:警告框、确认框、提示框  [网页制作]JavaScript运算符介绍
[网页制作]JavaScript比较和逻辑运算符介绍  [网页制作]script中的language=javascript和type=text/javas…
[JAVA开发]Java连接各种数据库的实例  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[系统软件]Regular Expression 正则表达式-2 (Java)  [C语言系列]sqlserver在JAVA中的应用
[网页制作]Dreamweaver MX实例:构建Java插入模块  [网页制作]使用Dreamweaver轻松构建Java插入模块
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台