从Java类库看设计模式(3) - 编程入门网
从Java类库看设计模式(3)时间:2011-04-23 IBM 刘武东上一次主要介绍了几个创建型的设计模式AbstractFactroy,FactoryMethod和Singliton 。它们的共同的特点,都是用来创建对象的。这次接下来的内容,涉及到的是几个结构型的 模式。所谓结构型模式,就是用来解决在创建系统结构的过程中,通过对类或者对象进行合 理有效的组合,以获得更大的结构的方法。这儿主要讲到了Bridge模式和Decorator模式。对 于Bridge模式可能需要更多的理解,因为它在很大程度上说,例示了设计模式的基本的设计 思路和原则。 Bridge模式 当初Java刚刚推出来的时候,AWT可是一个比较热的话题,虽然现在有被Swing取代的趋势 。但是我一直都觉得AWT也有其优势,至少它使用的本地代码就要比Swing快上许多,而且, 可以为用户提供熟悉的本地操作系统界面。如果在Windows XP中运行基于AWT的程序的话,XP 中绚烂多变的界面Theme可以轻易应用到AWT程序中,而Swing就不行了,因为AWT所调用的是 本带代码,使用的是本地的窗体控件。当然,Swing也有其好处,不可一概而论。 简单来讲,AWT提供对程序员的是对窗体界面系统的抽象,而在内部实现中,针对每一种 操作系统,分别有不同实现,这就是同位体(Peer)的概念。当程序员调用AWT对象时,调用 被转发到对象所对应的一个Peer上,在由Peer调用本地对象方法,完成对象的显示。例如, 如果你使用AWT创建了一个Menu类的实例,那么在程序运行时会创建一个菜单同位体的实例, 而由创建的同位体的来实际执行菜单的现实和管理。不同的系统,有不同的同位体实现, Solaris JDK将产生一个Motif菜单的同位体,Windows下的JDK将产生一个Windows的菜单的同 位体,等等。同位体的使用,使得交叉平台窗口工具的开发变得极为迅速,因为同位体的使 用可以避免重新实现本地窗口控件中已经包含的方法。 图九:AWT中的组件和其对等体 实际上,从设计的角度来看,这是一个抽象和实现分离的过程--AWT是抽象,同位体是实 现,抽象和实现各自成为一个对象体系,它们由一个桥连接起来,可以各自发展各自的对象 层次,而不必顾虑另一方面。这就是Bridge模式所提供的思想。Bridge模式更可以提供在各 个不同的实现中动态的进行切换,而不必从新编译程序。 通常,Bridge模式和AbstractFactory模式一起工作,由AbstractFactory来创建一个具体 实现的对象体系。特殊的,当只有一个实现的时候,可以将Implementor抽象类去掉。这样, 在抽象和实现之间建立起了一一对应的关系,但这并不损害Bridge模式的内涵。这被称为退 化了的Bridge模式。 很多时候,Abstraction层次和Implementor层次之间的方法都不是一一对应的,也就是说 ,在Abstraction和Implementor之不是简单的的消息转发。通常,我们会将Abstraction作为 一个抽象类(而不是接口)来实现。在Implementor层次中定义底层的,或者称之为原子方法 ,而在Abstraction层次中定义一些中高层的基于原子方法的抽象方法。这样,就能更为清晰 的划分Abstraction和Implementor,类的结构也更为清晰。 图十:Bridge模式对系统的划分 从Java类库看设计模式(3)(2)时间:2011-04-23 IBM 刘武东下面,我们来看一个Bridge模式的具体应用。考虑这样的一个问题,需要生成一份报告, 但是报告的格式并没有确定,可能是HTML文件,也可能是纯ASCII文本。报告本身也可能分为 很多种,财务报表,货物报表,等等问题很简单,用继承也较容易实现,因为相互之间的组 合关系并不是很多。但是,我们现在需要用Bridge的观点来看问题。 在Bridge模式中,使用一个Report类来描叙一个报告的抽象,用一个Reporter类来描叙 Report的实现,它的子类有HTMLReporter和ASCIIReporter,用来分 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |