网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.漫谈EJB对面向对象设计的影响.
.Java面试题(答案).
.消除对过期对象的引用.
.Spring+ibatis 数据化持久层(转.
.Java Applet 入门 第一天.
.Struts HOW-TO 系列 之数据库访问.
.使用Spring更好地处理Struts动作.
.SUN公司操作系统的发展战略.
.moveFirst 方法.
.JAVA高手解析XML配置文件的读取操.
.用 Java ME 进行无线消息传递.
.选择Java接口还是抽象类.
.Javascript实例教程(12) 鼠标移过.
..NET下开发Windows服务应用程序.
.使用.net Remtoing并行计算.
.表现层框架Struts/Tapestry/JSF比.
.如何在2D Graphics中使用双缓冲.
.全面保护你的Java程序安全.
.Eclipse快速上手指南之使用CVS(.
.Think in java 3rd 中文版9.

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

发表日期:2008-1-5



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

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

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

//抽象产品,可以是接口或者抽象类
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嵌套类的讨论 人气:699
下一篇:Java ME中一个通用的游戏信息框架类 人气:527
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐