从Java类库看设计模式(2) - 编程入门网
;
}
}
}
程序本身其实没有多大的意义,因而,程序在编码的时候也只是用的最简单的方法来实现 的,如果要做一个真正的TaskSchedule的话,这个程序除了结构上的,其它没有什么好值得 参考的了。 从Java类库看设计模式(2)(3)时间:2011-04-23 IBM 刘武东AbstractFactory 和 FactoryMethod 基本上来说,AbstractFacotry模式和FactoryMethod模式所作的事情是一样的,都是用来 创建与具体程序代码无关的对象,只是面对的对象层次不一样,AbstractFactory创建一系列 的对象组,这些对象彼此相关。而FactoryMethod往往只是创建单个的对象。 再开始这两个模式之前,有必要先陈叙一个在设计模式,或者说在整个面向对象设计领域 所遵循的一个设计原则:针对接口编程,而不是针对具体的实现。这个思想可以说是设计模 式的基石之一。现在的很多对象模型,比如EJB,COM+等等,无不是遵照这个基本原则来设计 的。针对接口编程的好处有很多,通过接口来定义对象的抽象功能,方便实现多态和继承; 通过接口来指定对象调用之间的契约,有助于协调对象之间的关系;通过接口来划分对象的 职责,有助于寻找对象,等等。 AbstractFactory和FactoryMethod,还有其他的一些创建型的设计模式,都是为了实现这 个目的而设计出来的。它们创建一个个符合接口规范的对象/对象组,使得用同一个Factory 创建出来的对象/对象组可以相互替换。这种可替换性就称为多态,是面向对象的核心思想之 一。而多态,是通过动态绑定来实现的。 图四:AbstractFactory模式的类图 客户程序使用具体的AbstractFacotry对象(ConcreteFactoryX)调用CreateProductX() 方法,生成具体的ConcreteProductX。每个AbstractFactory所能生成的对象,组成一个系列 的对象组,他们可能是相互相关的,紧耦合的。应为各个AbstractFactory对象所能够生成的 对象组都遵循一组相同的接口(AbstractProductX),因而当程序是针对接口进行编程的时 候,这些实现方法各不相同的对象组却可以相互的替换。 实际上,客户程序本身并不关心,也不知道具体使用的是那些产品对象。它甚至能够不理 会到底是哪个AbstractFactory对象被创建。在这种情况下,你可能会问,那么一个 AbstractFactory又该如何生成呢?这时候,就该用该FactoryMethod模式了。 前面有说过,AbstractFactory着重于创建一系列相关的对象,而这些对象与具体的 AbstractFactory相关。而FactoryMethod则着重于创建单个的对象,这个对象决定于一个参 数或者一个外部的环境变量的值;或者,在一个抽象类中定义一个抽象的工厂方法(也成为 虚拟构造器),然后再实现的子类中返回具体的产品对象。 FactoryMethod可以借助一个参数或者一个外部的标志来判断该具体生成的哪一个子类的 实例。比如对于不同的具体情况,需要有不同的AbstractFactory来生成相应的对象组。这时 候,FactoryMethod通常作为一个AbstractFactory对象的静态方法出现,使得其能够在具体 的对象被创建之前就能够被调用。 在JAVA中,应用这两个模式的地方实在太多,下面我们来看一个在JAXP中这两个模式的应 用。JAXP是用来处理XML文档的一个API。我们都知道XML文件的一个特点就是其平台无关,流 通性能好。因而往往也需要处理他们的程序具有更好的平台无关性。Java语言是一个比较好 的平台无关语言,可以作为一个选择,但是对XML进行解析的解析器确有很多。有时候需要在 不同的解析器之间进行切换,这时候,JAXP的良好设计就能够体现出来了。它能够允许在不 同解析器之间竟进行切换的时候,不用更改程序的代码。 从Java类库看设计模式(2)(4)时间:2011-04-23 IBM 刘武东我们就拿JAXP中的DOM解析器来作为例子,来例示Abstract |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |