`

四十二:桥梁模式

阅读更多
一:桥梁模式的用意
将抽象化与实现化脱耦,使得二者可以独立地变化,使得二者可以独立地变化,这就是桥梁模式的用意:
(A)抽象化:存在于多个实体中的共同的概念性联系,就是抽象化,作为一个过程,抽象化就是忽略一些信息,从而把不现的实体当作同样的实体来对待.
(B)实现化:把抽象的东西用把它具体的描述出来,就是实现化.
(C)脱耦:所谓耦合,就是两个实体的行为的某种强关联,而将它们的强关联去掉就叫脱耦。在这里,脱耦是指将抽象化和实现化之间的耦合解脱开,或者说是将它们之间的强关联改成弱关联(所谓强关联,就是在编译的时期已经确定的,无法在运行时期动态改变的关联,所谓弱关联,就是可以动态地确定并且可以在运行时期动态地改变的关联,显然,在Java语言中,继承关系是强关联,而聚合关系是弱关联。将两个角色之间的继承关系改为聚合关系,就是将它们之间的强关联换成了弱关联,因此,桥梁模式中的所谓脱耦,就是指在一个软件系统的抽象化和实现化之间使用聚合关系而不是继承关系,从而使两者可以相对独立地变化,这就是桥梁模式的用意.)

二:桥梁模式中的角色
(A)抽象化角色(Abstraction)角色:抽象化给出的定义,并保存一个对实现化对象的引用
(B)修正抽象化(Refined Abstraction)角色:扩展抽象化角色,改变和修正父类对抽象的定义
(C)实现化角色(Implementor)角色:这个角色给出实现化角色的接口,但不给出具体的实现,必须指出的是,这个接口不一定和抽象化角色的接口定义相同,实际是,这两个接口可以非常不一样。实现化角色应当只给出底层操作,而抽象化角色应当只给出基于底层操作的更高一层的操作
(D)具体实现(Concrete Implementor)角色:这个角色给出实现化角色接口的具体实现
抽象经等级结构中的商业方法通过向对应的实现化对象的委派实现自己的功能,这意味抽象化角色可以通过向不同的实现化对象委派来达到动态地转换自己的功能的目的.
下面给出示意性的代码:
package cai.milenfan.basic.test; 
public abstract class Abstraction { 
protected Implementor imp; 
//一个商业方法
public void operation(){ 
imp.operationImp(); 
} 
} 


package cai.milenfan.basic.test; 

public class RefinedAbstraction extends Abstraction{ 
//某个商业方法在修正抽象角色的实现
public void operation(){ 
//improved logic 
} 
} 


package cai.milenfan.basic.test; 

public abstract class Implementor { 
public abstract void operationImp(); 
} 


package cai.milenfan.basic.test; 

public class ConcreteImplementor extends Implementor{ 
public void operationImp() { 
System.out.println("do something......"); 
} 
} 


三:Java语言中的Peer架构
一个Java的软件系统总是带有所在的操作系统的视感(Look and Feel)。如果一个软件系统是在Unix系统上面开发的,那么开发人员看到的是Motif用户界面的视感,在Windows上面使用这个系统的客户看到的是Windows用户界面的视感,而一个在Macintosh上面使用的用户看到的则是Macintosh用户界面的视感...Java是怎么做到这一点的?
(A)AWT的Peer架构
Java语言是通过所谓的Peer架构做到这一点的.
在一个java应用程序和真正的显示屏之间还有几个软件架构层次,假设现在考察的是一个Scrollbar构件,那么在显示屏上看到的是一个本地的滚动条,与所在的操作系统的任何其他滚动条没有区别,因为这个与系统有关的滚动条实际上是Java的Scrollbar对象的Peer对象所产生的,这个对象的类型是java.awt.peer.ScrollbarPeer,而不是Java应用程序所使用的类型为java.awt.Scrollbar的对象,这个Peer对象会首先截获诸如鼠标单击这样的事件,然后将有关信息传递给Java的Scrollbar对象。
一般地,在每一个Java构件和它的Peer构件之间都有一个Peer接口,这个Peer接口定义出每一个Java构件与其peer构件之间的关系,它使得一个像Scrollbar这样的构件可以动态地与任何操作系统的本地滚动条发生Peer关系,Button和ButtonPeer的通信如下,Button是一个Java构件,通过Toolkit对象与本地的Peer构件通信:
Java中的Button-----addNotify()---->Toolkit-----createButton()----->Native Button
一般而言,Java程序员只需要知道Java所提供的构件,而不需要知道系统底层所使用的peer构件.
(B)Peer接口
Java为Awt中的每一个Gui构件都提供了一个Peer构件,这个peer构件是所属的Java构件在本地环境中的实现化,比如Choice是一个AWT提供的GUI构件,它允许用户在一个列中选择一个或者多个项,一个Java应用程序的开发人员只需要考虑Choice对象所提供的接口就可以了,用户运行这个系统时,这个Choice对象被动态地与一个合适的底层Peer对象联系起来,这个Peer对象会按照指令执行正确的操作,这个将Java的GUI构件与本地环境的Peer构件联系起来的接口就是所谓的peer接口,AWT提供的所有peer接口都放在java.awt.peer库中.
(C)java.awt.peer库
ComponentPeer接口是所有的(非菜单)视窗构件的Peer接品的超级接口
MenuCoomponentPeer给出了所有菜单视窗构件的超类型
FontPeer是Font构件的超类型
创建一个视窗构件并不会间即创建一个对应的Peer对象,只有当视窗的addNotify()方法被调用时,所对应的Peer构件才会被创建出来.
(D)桥梁模式在Java中的应用
在awt库中的每一个Component的子类都有一个ComponentPeer的子类与之匹配,所有Component的子类都属于一个等级结构,而所有的ComponentPeer的子类都属于另一个等级结构,Component类型和ComponentPeer类型通过Toolkit对象相互通信.抽象类Component是各种个体的视窗构件的超类型,这些视窗构件是与操作系统的细节无关,它们向外界提供统一的功能接口,ComponentPeer是各种Peer对象的超类型,这些peer对象负责处理与操作系统细节密切相关的功能的实现,具体视窗构件对象通过向相应的Peer对象进行功能委派,达到利用ComponentPeer的功能的目的.
Component相当于桥梁模式中的抽象角色,Button等相当于修正抽象角色,ComponentPeer相当于实现化角色,而ButtonPeer相当于个体实现化角色,系统根据当前操作系统动态地选择Button对象所使用底层实现。
(E)JDBC驱动器中的桥梁模式
分享到:
评论

相关推荐

    三十种架构设计模式(上).pdf

    ### 三十种架构设计模式(上) #### 一、引言 随着软件工程的发展与进步,设计模式成为了软件开发人员不可或缺的一部分。它们是基于长期实践经验总结出来的通用解决方案,旨在帮助开发者解决常见问题并提高代码...

    PHP设计模式介绍.

    #### 第十二章:装饰器模式—功能增强的无缝集成 装饰器模式是一种结构型设计模式,它允许在不改变对象结构的情况下动态地添加新的功能。通过将对象包装在装饰器中,可以在运行时为对象添加职责,而无需修改原始类...

    Java设计模式经典搞笑珍藏版

    #### 二十二、中介者模式(Mediator Pattern) 中介者模式用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 #### 二十三、解释...

    Java 设计模式最佳实践

    适配器模式作为两个不兼容接口之间的桥梁,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。它可以将旧的接口转换为新的接口,以适应现有的系统。 九、模板方法模式(Template Method) 模板方法模式...

    c++设计模式 经典的

    二十二、享元模式 享元模式使用共享技术有效地支持大量细粒度的对象,减少内存消耗。C++中,享元类通常包含轻量级和内部状态,外部状态由客户端管理。 二十三、访问者模式 访问者模式在对象结构中定义一个访问的...

    java 设计模式-个人总结

    桥梁模式 (Bridge) - **定义**:将抽象部分与它的实现部分分离,使它们都可以独立地变化。 - **应用场景**:当一个类存在两个独立变化的维度,且这两个维度都需要进行扩展时。 - **优点**:提高系统的可扩展性,让...

    java设计模式

    #### 二十二、中介者模式(Mediator Pattern) **定义**:用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 **应用场景**: - ...

    java设计模式之禅

    ### 二十二、解释器模式(Interpreter Pattern) 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。 **应用场景**: - 编译器; - 查询语言的解析。 ### 二十三...

    以工程实践为导向的桥梁工程课程教学方法改革.docx

    ### 以工程实践为导向的桥梁工程课程...通过上述措施的实施,可以有效弥补现有教学模式的不足,培养出更多既具备扎实理论基础又拥有丰富实践经验的高素质工程技术人才,为我国的基础设施建设和经济社会发展贡献力量。

    中国中小企业融资二十八种模式与实务的运作.ppt

    实际上,融资的策略和技术就像是一座桥梁,将中小企业与资金市场连接起来,帮助它们突破融资难的瓶颈,实现资金的畅通流动和企业的可持续发展。 首先,我们要认识到融资的复杂性。融资不仅仅是资金的简单获取,它...

    实用J2EE设计模式编程指南

    **二、工厂模式** 工厂模式是创建型设计模式,用于封装对象的创建过程,使得客户端代码无需关心具体对象的实例化细节。在J2EE中,我们可以利用它来创建EJBs或者DAOs(数据访问对象),隐藏底层实现,提高代码的灵活...

    25种java模式代码参考手册.doc

    #### 四、桥梁(Bridge)/柄体(Handle and Body)模式 **意图:** 将抽象部分与它的实现部分分离,使它们都可以独立地变化。这样可以在运行时动态地改变一个对象的表现形式。 **应用场景:** - 当一个类的行为应该独立...

    计算机组成与体系结构(性能设计)答案完整版-第八版

    - **第十二章:处理器结构与功能**:介绍处理器的核心组件及其工作流程。 - **第十三章:精简指令集计算机**:对比CISC与RISC架构,并分析后者的优势。 - **第十四章:指令级并行性和超标量处理器**:探索通过同时...

    Java常用的设计模式

    #### 十四、命令模式(Command) **命令模式**将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。 ##### 应用场景 - 需要将请求调用者和请求...

    无线网桥工作模式.docx

    **二、AP(接入点)模式**: - 无线网桥可以转换为AP,将有线网络信号转化为无线信号,用于较近距离的无线覆盖。配合不同类型的天线,可以满足不同距离和覆盖角度的需求。 **三、客户端模式**: - 无线网桥可以...

    疯狂Android讲义(第2版)源代码

    12. **第十二章:碎片(Fragment)** - Fragment基本概念:在大屏幕设备上的多屏设计,提高复用性。 - 活动与碎片的交互:添加、移除和替换碎片,以及生命周期管理。 13. **第十三章:动画(Animation)** - 二...

    山东高校教师资格证的笔试

    #### 二十二、教学策略与方法的关系 - **战术与战略的层次**:教学策略通常被认为是实现教学目标的具体手段,属于“战术”范畴;而教学方法则是更高层次的规划,属于“战略”范畴。这种区分有助于教师更好地理解不同...

    大学计算机基础题库.pdf

    10. 计算机模式:B/S模式,即浏览器/服务器模式,是现代网络应用的常见架构。 【数制与计算机编码】 1. 数制转换:十六进制的基数是16,不同数制之间可以进行转换,如13AH等于十进制的314D。 2. 二进制运算:二...

Global site tag (gtag.js) - Google Analytics