设计模式.桥接模式(Bridge).pptx

上传人:wuy****n92 文档编号:73977319 上传时间:2023-02-23 格式:PPTX 页数:33 大小:1.75MB
返回 下载 相关 举报
设计模式.桥接模式(Bridge).pptx_第1页
第1页 / 共33页
设计模式.桥接模式(Bridge).pptx_第2页
第2页 / 共33页
点击查看更多>>
资源描述

《设计模式.桥接模式(Bridge).pptx》由会员分享,可在线阅读,更多相关《设计模式.桥接模式(Bridge).pptx(33页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、LOGO设计模式设计模式(Design Pattern)张凯 副教授计算机学院 软件工程系武汉科技大学问题问题(Problem)(Problem)v凭什么你的手机游戏我不能玩M品牌手机的游戏,N品牌不能玩不同品牌手机操作系统不同,软件不通用用程序模拟,N品牌手机,有一个游戏,运行游戏的程序如何写武汉科技大学问题问题(Problem)(Problem)static void Main(string args)MobilePhoneNGame game=new MobilePhoneNGame();game.Run();Console.Read();class MobilePhoneNGame p

2、ublic void Run()Console.WriteLine(运行N品牌手机游戏);如果有一个如果有一个M品牌手机,也有游戏可以运行,如何设计?品牌手机,也有游戏可以运行,如何设计?武汉科技大学问题问题(Problem)(Problem)武汉科技大学问题问题(Problem)(Problem)class MobilePhoneGame public virtual void Run()class MobilePhoneNGame:MobilePhoneGame public override void Run()Console.WriteLine(运行N品牌手机游戏);class Mob

3、ilePhoneMGame:MobilePhoneGame public override void Run()Console.WriteLine(运行M品牌手机游戏);如果如果M品牌和品牌和N品牌手机,都添加了通讯录怎么办?品牌手机,都添加了通讯录怎么办?武汉科技大学问题问题(Problem)(Problem)如果再添加如果再添加Mp3音乐播放功能,怎么修改?音乐播放功能,怎么修改?武汉科技大学问题问题(Problem)(Problem)如果再添加如果再添加S品牌手机,并且有相同功能,怎么修改?品牌手机,并且有相同功能,怎么修改?武汉科技大学问题问题(Problem)(Problem)怎么这

4、么麻烦,换一种方式试一下怎么这么麻烦,换一种方式试一下武汉科技大学问题问题(Problem)(Problem)思考:为什么抽象了思考:为什么抽象了手机品牌手机品牌,或抽象了,或抽象了手机软件手机软件,当需求变化时,感觉如此不稳定?当需求变化时,感觉如此不稳定?违背了面向对象违背了面向对象单一职责原则单一职责原则!武汉科技大学主要内容主要内容模式动机与定义1模式结构与分析2模式实例与解析3模式效果与应用4武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式动机模式名称:桥接模式(Bridge)桥接模式的用意是“将抽象化(Abstraction)与实现化(Implementation

5、)脱耦,使得二者可以独立地变化”。这句话有三个关键词抽象化 实现化 脱耦武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式定义 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v解耦变化 我们需要解耦这两个方向的变化,把它们之间的强耦合关系改成弱联系。我们把手机品牌和手机软件的实现分别当作两个独立的部分来对待

6、。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)这时对于手机品牌和手机软件这两个类都可以独立的变化了!我们要做的工作就是把这两部分之间连接起来,那如何连接呢?Bridge使用了对象聚合的方式,像一座桥武汉科技大学桥接模式桥接模式(Bridge)(Bridge)abstract class MobilePhoneSoft /手机软件 public abstract void Run();class MobilePhoneGame:MobilePhoneSoft /手机游戏 public override void Run()Console.WriteLine(运行手机游戏);cla

7、ss MobilePhoneAddressList:MobilePhoneSoft /手机通讯录 public override void Run()Console.WriteLine(运行手机通讯录);class MobilePhoneMP3:MobilePhoneSoft /手机MP3播放 public override void Run()Console.WriteLine(运行手机MP3播放);武汉科技大学桥接模式桥接模式(Bridge)(Bridge)/手机品牌 abstract class MobilePhoneBrand protected MobilePhoneSoft sof

8、t;/设置手机软件 public void SetHandsetSoft(MobilePhoneSoft soft)this.soft=soft;/运行 public abstract void Run();/手机品牌N class MobilePhoneN:MobilePhoneBrand public override void Run()soft.Run();武汉科技大学桥接模式桥接模式(Bridge)(Bridge)static void Main(string args)MobilePhoneBrand ab;ab=new MobilePhoneN();ab.SetHandsetSo

9、ft(new MobilePhoneGame();ab.Run();ab.SetHandsetSoft(new MobilePhoneAddressList();ab.Run();Console.Read();武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式结构 武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式结构 在桥接模式中不仅Implementor具有变化(ConcreateImplementior),而且Abstraction也可以发生变化(RefinedAbstraction),这是一个多对多的关系,而且两者的变化是完全独立的。RefinedAbs

10、traction与ConcreateImplementior之间松散耦合,它们仅仅通过Abstraction与Implementor之间的聚合关系联系起来。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v参与者 Abstraction:抽象类 RefinedAbstraction:扩充抽象类 Implementor:实现类接口 ConcreteImplementor:具体实现类武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v例子 考虑不同平台的日志记录,对于操作数据库、写入文本文件所调用的方式可能是不一样的,为此对于不同的日志记录方式,我们需要提供各种不同平台上的实

11、现,对上面的类做进一步的设计得到了下面的结构图武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v例子 现在的这种设计方案本身是没有任何错误的,假如现在我们要引入一种新的xml文件的记录方式,则上面的类结构图会变成武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v例子 我们新增加了一个继承于Log基类的子类,而没有修改其它的子类,这样也符合了开放-封闭原则。如果我们引入一种新的平台,比如说我们现在开发的日志记录工具还需要支持Borland平台,此时该类结构又变成武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v例子 Bridge模式粉墨登场,我们需要解耦这两个

12、方向的变化,把它们之间的强耦合关系改成弱联系。我们把日志记录方式和不同平台上的实现分别当作两个独立的部分来对待武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v例子 这样的设计是脆弱的,它在遵循开放-封闭原则的同时,违背了类的单一职责原则,即一个类只有一个引起它变化的原因,而这里引起Log类变化的原因却有两个,即日志记录方式的变化和日志记录平台的变化。重复代码会很多,不同的日志记录方式在不同的平台上也会有一部分的代码是相同的;再次是类的结构过于复杂,继承关系太多,难于维护,最致命的一点是扩展性太差。上面我们分析的变化只是沿着某一个方向,如果变化沿着日志记录方式和不同的运行平台两个方

13、向变化,我们会看到这个类的结构会迅速的变庞大。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v桥接模式的优点如下分离接口及其实现部分。桥接模式使用“对象间的组合关系”解耦了抽象和实现之间固有的绑定关系,使得抽象和实现可以沿着各自的维度来变化。所谓抽象和实现沿着各自维度的变化,即“子类化”它们,得到各个子类之后,从而获得不同平台上的不同型号。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v桥接模式的优点如下桥接模式的应用一般在“两个非常强的变化维度”,有时候即使有两个变化的维度,但是某个方向的变化维度并不剧烈换言之两个变化不会导致纵横交错的结果,并不一定要使用桥接模式

14、。桥接模式提高了系统的可扩充性。实现细节对客户透明,可以对用户隐藏实现细节。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v桥接模式的优点如下桥接模式有时候类似于多继承方案,但是多继承方案往往违背了类的单一职责原则(即一个类只有一个变化的原因),复用性比较差。桥接模式是比多继承方案更好的解决方法。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式使用在以下的情况下应当使用桥接模式:如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的联系。设计要求实现化角色的任何改变不应当影响客户端,或者说实现化角色的改变对客户端是完全透明的。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式使用在以下的情况下应当使用桥接模式:一个构件有多于一个的抽象化角色和实现化角色,系统需要它们之间进行动态耦合。虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体化角色需要独立变化,设计要求需要独立管理这两者。武汉科技大学桥接模式桥接模式(Bridge)(Bridge)v模式应用Java虚拟机 LOGO

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com