WWW.LOUGH.COM.CN

加入收藏 | 设为首页 | 联系站长
首页 | Java | C&C++ | 数据库 | 经验交流
论坛首页 | 综合区 | 贴图区 | 狐朋狗友 | 学习区 | 站务区
博客首页 | IT技术 | WebServices | Hibernate | Java设计模式 | Struts | AJAX | 数据库
首页 | 中华古籍 | 网络原创 | 随记

Java类库中的设计模式(五)

Java类库中的设计模式(五)

    前面说过了,在Java类库中设计模式的踪影随处可见,因而要讲解所有出现的模式
实在是不可能,这儿主要把焦点聚集在AWT/Swing中,管中窥豹,却也可以了解设计模式
的一些深刻的含义所在。
2.2 Bridge模式和对等体(3月13日)
    Java号称的平台无关性,一部分要归功于Bridge模式。因为AWT中使用的对等体的概
念,就是Bridge模式的一个应用。对等体在AWT中是一个非常重要的概念。每个AWT组件
都会有其相应平台上的对等体,来实现这个组件基本的平台相关的特性,而AWT组件实际
上是一种高层次上的抽象。
    对大部分的开发者而言,并不需要直接处理对等体,绝大部分调用对等体的细节都
被AWT组件包装起来了。对于用户事件则相反,由对等体接受后进行封装,然后传递给组
件调用相应的事件响应过程。下面我们来看看对等体实现的类图:
    在每一个平台上,对每一个组件而言,都有相应的平台相关的对等体。这也就是Ja
va程序能够“一处编写,到处运行”的一个原因了。
    在新的Swing构件中,对等体的概念已经被抛弃。因为虽然对等体能够实现跨平台的
功能,但是相对于所能解决的问题,对等体还会带来一些更多的副作用,比如如果在对
等体被创建之前调用组件的方法,就会产生很多问题。但是,这并不会丝毫减少Bridge
模式的魅力。下面我们就来看看Bridge模式的一些详细的情况。
    一般的,我们需要将抽象与实现分离来实现更好的可重用性,这也是设计模式的主
题思想之一。通常,我们都是用的继承一个抽象类来实现这一目的的。但是有时候继承
在解决问题的时候,还会带来一些另外的问题。比如,在继承类中,抽象和实现还是结
合在一起的。再有就是,继承所带来的灵活性不够,当修改抽象或者实现的一部分的时
候,就必须修改整个的类结构体系,这是非常麻烦的。
    Bridge模式的主要作用就是分离抽象与实现,使这两个部分都能够较为独立的变化
。特别是当一个抽象对应于多个实现的时候,Bridge模式的功用更是明显。我们来看看
它的类图,就会知道它为什么能够实现这种功用了:
    在抽象中定义的方法的是通过它维持的一个实现的引用,并调用这个实现中的一系
列方法来实现的。一般的,在抽象中所定义的方法是比较高程层次的,而在实现中定义
一些底层的方法来供调用。客户所能够看到的,只是抽象中所定义的接口。通过那个引
用imp,就可以很容易实现抽象和实现的分离,并保证一边的变动不会影响到另外一边。
这只是给出了一个比较简略的结构图,实际上,在Abstraction和Implementor两边,都
可以分别由两个互不相关的类层次。
    需要提到的是,在创建对等体的过程中还使用了另外的一个模式:AbstractFactor
y,它是如何用到的呢?你看了下面的内容就知道了。


关于我们 | 站点地图 | 免责声明 | 联系我们 | ©2003-2007 Lough.com.cn 京ICP备06060948号