体系结构课件-第九章桥接模式_第1页
体系结构课件-第九章桥接模式_第2页
体系结构课件-第九章桥接模式_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第九章桥接模式

(Bridge

pattern)9.1桥接模式简介将抽象部分与实现部分分离,使它们都可以独立地变化。---(抽象、实现、脱耦)——《设计模式》GoF抽象---存在于多个实体中的共同的概念性联系,就是抽象。作为一个过程,抽象就是忽略一些信息,从而把不同的实体当做同样的实体对待。实现---针对抽象给出的具体实现。所谓耦合,就是两个实体的行为的某种强关联。而将它们的强关联去掉,就是耦合的解脱,或称脱耦/解耦。在这里,脱耦是指将抽象和实现之间的耦合解脱开,或者说是将它们之间的强关联改换成弱关联。将两个角色之间的继承关系改为组合关系,就是将它们之间的强关联改换成为弱关联。因此,桥接模式中的所谓脱耦,就是指在一个软件系统的抽象和实现之间使用组合关系而不是继承关系,从而使两者可以相对独立地变化。这就是桥接模式的用意。桥接模式不能只是认为是抽象和实现的分离,它其实并不仅限于此,更确切的理解:应该是将一个事物中多个维度的变化分离。9.2桥接模式的结构9.2桥接模式的结构(续)抽象(Abstraction)角色:抽象给出的定义,并保存一个对实现对象的引用。

精化的抽象(RefinedAbstraction)角色:扩展抽象角色,改变和修正父类对抽象的定义。

实现(Implementor)角色:这个角色给出实现角色的接口,但不给出具体的实现。必须指出的是,这个接口不一定和抽象角色的接口定义相同,实际上,这两个接口可以非常不一样。实现角色应当只给出底层操作,而抽象角色应当只给出基于底层操作的更高一层的操作(抽象角色调用实现角色的底层操作来完成其功能)。

具体实现(ConcreteImplementor)角色:这个角色给出实现角色接口的具体实现。9.3示例假如我们需要开发一个同时支持PC和手机的坦克游戏,游戏在PC和手机上功能都一样,都有同样的类型,面临同样的功能需求变化,比如坦克可能有很多种不同的型号:T50,T75,T90等,将来还可能将这款游戏移植到TV中。对于其中的坦克设计,我们可能很容易设计出来一个Tank的抽象基类,然后各种不同型号的Tank继承自该类;但是PC和手机上的图形绘制、声效、操作等实现完全不同……因此对于各种型号的坦克,都要提供各种不同平台上的坦克实现----示例:TankGameInherit这样的设计会带来很多问题:有很多重复代码,类的结构过于复杂,难以维护,最致命的是引入任何新平台,比如在TV上的Tank游戏,都会让整个类层级结构复杂化。“有了新锤子,所有的东西看上去都成了钉子!”9.3示例(续1)思考上述问题的症结:事实上由于Tank类型的固有逻辑,使得Tank类型具有了两个变化的维度——一个变化的维度为“平台的变化”,一个变化的维度为“型号的变化”。如何应对这种“多维度的变化”?如何利用面向对象技术来使得Tank类型可以轻松地沿着“平台”和“型号”两个方向变化,而不引入额外的复杂度?示例:TankGameBridgeTank的型号,和Tank的平台都继承自各自的抽象类,因此它们的变化都不会影响到对方。而它们之间的关联,我们使用组合的方式,把平台类放到Tank类中作为属性。这再次体现了组合优先于继承的思想。桥接模式把平台的变化引出了基类Tank,使得Tank仅负责封装型号的变化,而TankPlatformImplementation则负责封装平台的变化。应用程序在环境交互中使用的都是抽象类,并且把平台实现隐藏。9.3示例(续2)关键点:

其中Tank抽象类中定义tankImpl的地方就是一个组合。对应前面讲的桥接模式的结构图:Abstraction就是例子中的TankAbstraction的子类RefinedAbstraction就是T50、T70、T90等型号的坦克Implementor是TankPlatformImplementation类ConcreteImplementorA和ConcreteImplementorB分别是PCTankformImplementation和MobileTankformImplementation整个设计模式的关键就是组合的使用。9.4桥接模式总结Bridge模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象(Tank的型号)和实现(不同的平台)可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化,即“子类化”它们(比如不同的Tank型号子类,和不同的平台子类),得到各个子类之后,便可以任意组合它们,从而获得不同平台上的不同型号。Bridge模式有时候类似于多继承方案,但是多继承方案往往违背单一职责原则(即一个类只有一个变化的原因),复用性比较差。Bridge模式是比多继承方案更好的解决方法。9.4桥接模式总结(续)Bridge模式一般应用在“两个或多个非常强的变化维度”上,有时候即使有两个变化的维度,但是某个方向的变化维度并不剧烈——换言之两个变化不会导致纵横交错的结果

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论