主页>技术社区>IT 技术与微软技术>编程开发>JAVA>Java 高级技术>Java 设计模式

实现Java抽象工厂模式

eIT.com.cn 2008/7/29 12:09:09 阅读 176 次

打印



  了解模式需要研究客户端程序(使用模式者)和模式的内部结构,并且理解两者之间的通信接口、模式本身因功能增加造成的变动(易碎性),以及客户端程序利用新功能的难易程度。本文针对这些问题提出了一个具体的抽象工厂模式实现方案。
  模式结构介绍
  这个模式由一个工厂类层次和N个产品类层次组成。从每一个产品类层次中取出一个产品类形成产品类族,这个类族的实例为产品族。产品族中的产品之间有一种依赖关系。一个具体的工厂类负责创建产品族中的各个产品。
  从图1可以看出,通信接口由一个抽象工厂接口和两个抽象产品组成。模式部分显示了两个产品类 ProductA 和ProductB、两个产品类族ProductA1、ProductB1和ProductA2、ProductB2,以及两个产品类族对应的两个工厂ConcreteFactory1、ConcreteFactory2。
   
  图1 标准抽象工厂模式
  从模式定义中知道这个模式的意图内容为:
  提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。工厂类层次的通信接口只有抽象工厂和创建产品族的各个工厂方法,这些工厂方法不带任何参数,并且返回具有抽象产品类型的具体产品实例。这些使得客户端可以不依赖具体产品的类,从而体现了模式的意图。意图中的“而无需指定它们具体的类”可以理解为客户端在使用和创建具体产品时不给出具体产品的任何暗示。
  变动
  我们分析模式的变动时必须先固化模式和客户端间的通信接口,即通信接口是固定不变的。分析变动就是分析模式的易碎性(模式实现适应变动的能力)。对抽象工厂模式可以考虑两个变动:
  1. 加一个产品类族;
  2. 加一个产品类。
  变动一的易碎性较小,我们只需在每个产品类层次中增加这个产品族中产品类作为抽象产品类的子类,同时增加一个工厂子类来创建这个产品类族的产品族足以。
  变动二要求在模式中增加一个产品类,意味着增加一个产品类层次。由于通信接口中的工厂方法固定了客户能创建的产品的类型数目,所以增加一个产品类意味着修改与客户端的通信接口,进一步意味着旧的客户端要使用新的模式实现就要重新编码,整个工厂类层次都需要改动。综合上述,这个变动的易碎性很大。
  设计
  程序架构
  一个程序可以从三个维度进行架构,这三个维度是层、级和服务。层代表了不同的抽象程度,比如操作系统的分层;级代表不同的角色和职责,比如Client/Server的两级模型;服务代表了具有通用功能的支持模块。
  实现一个模式从级这个维度来讲可以简单地分成两级,即客户端和模式端。从服务维度讲模式可以利用某些服务,如事务、名字和目录服务、安全等服务器提供商开发的设施服务。模式本身也可以实现成供客户端访问的服务,从而形成应用服务,典型的有EJB组件。应用程序的开发从层上考虑的比较少。图2体现了实现抽象工厂模式的程序架构。
来源:收集整理于互联网





相关内容

• 设计模式之非主流存储数据方式 (2008/10/4 17:08:12)
• JAVA入门,DAO设计模式 (2008/10/4 17:08:11)
• Java设计模式的中介者模式 (2008/9/8 18:58:42)
• Java设计模式之迭代器模式 (2008/9/8 18:58:41)
• Java与模式:缺省适配器模式 (2008/9/8 18:58:41)
• Java与模式:合成模式 (2008/9/8 18:58:40)
• Java与模式:适配器模式 (2008/9/8 18:58:39)
• 圣斗士星矢的状态模式和观察者模式 (2008/9/8 18:58:39)
• 使用Decorator模式翻译者:Disneytiger (2008/7/29 12:09:30)
• 利用Observer模式解决组件间通信问题 (2008/7/29 12:09:30)



热门栏目


特别声明


最新资讯
热讯排行



合作媒体友情链接
科技与视觉 软件开发教程 智慧城市生活网 息县通生活服务[移动版] 息县商圈[移动版] 美食菜谱
健康养生 百科常识 法律知识 科技频道 同城生活系统 留学考研学习


关于我们 | 联系我们 | 合作媒体 | 使用条款 | 隐私权声明 | 版权声明
      Copyright © eIT.com.cn. All Rights Reserved. 豫ICP备20006152号-2