C++桥接设计模式.pdfVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在软件系统中,某些类型由于自身的逻辑,它具有两个维度和多个 维度的变化,如何利用面向对象的技术来使得该类型能够轻松的沿着多 个方向进行变化,而又不引入额外的复杂度?这就需要引入桥接模式了。 桥接模式是让它的抽象部分和实现部分进行分离,使它们可以独立的变 化,桥接模式是一种结构型设计模式。 桥接模式的优点: 1. 桥接模式的优点 (1)实现了抽象和实现部分的分离 桥接模式分离了抽象部分和实现部分,从而极大的提供了系统的灵活性, 让抽象部分和实现部分独立开来,分别定义接口,这有助于系统进行分 层设计,从而产生更好的结构化系统。对于系统的高层部分,只需要知 道抽象部分和实现部分的接口就可以了。 (2)更好的可扩展性 由于桥接模式把抽象部分和实现部分分离了,从而分别定义接口,这就 使得抽象部分和实现部分可以分别独立扩展,而不会相互影响,大大的 提供了系统的可扩展性。 (3)可动态的切换实现 由于桥接模式实现了抽象和实现的分离,所以在实现桥接模式时,就可 以实现动态的选择和使用具体的实现。 (4 )实现细节对客户端透明,可以对用户隐藏实现细节。 2. 桥接模式的缺点 (1)桥接模式的引入增加了系统的理解和设计难度,由于聚合关联关系 建立在抽象层,要求开发者针对抽象进行设计和编程。 (2)桥接模式要求正确识别出系统中两个独立变化的维度,因此其使用 范围有一定的局限性。 3. 桥接模式的使用场景 (1)如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多 的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可 以使它们在抽象层建立一个关联关系。 (2)抽象化角色和实现化角色可以以继承的方式独立扩展而互不影响, 在程序运行时可以动态将一个抽象化子类的对象和一个实现化子类的对 象进行组合,即系统需要对抽象化角色和实现化角色进行动态耦合。 (3)一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。 (4 )虽然在系统中使用继承是没有问题的,但是由于抽象化角色和具体 化角色需要独立变化,设计要求需要独立管理这两者。 (5)对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧 增加的系统,桥接模式尤为适用 下面介绍具体的实例: 例如手机品牌和软件是两个概念,不同的软件可以在不同的手机上, 不同的手机可以有相同的软件,两者都具有很大的变动性。如果我们单 独以手机品牌或手机软件为基类来进行继承扩展的话,无疑会使类的数 目剧增并且耦合性很高,(如果更改品牌或增加软件都会增加很多的变 动)两种方式的结构如下: 所以将两者抽象出来两个基类分别是 PhoneBrand 和 PhoneSoft ,那么 在品牌类中聚合一个软件对象的基类将解决软件和手机扩展混乱的问题, 这样两者的扩展就相对灵活,剪短了两者的必要联系。 这样扩展品牌和软件就相对灵活独立,达到解耦的目的! 代码如下: AbstractPhoneSoft.h #ifndef ABSTRACTPHONESOFT_H #define ABSTRACTPHONESOFT_H // 抽象基类,定义了实现的接口 class AbstractPhoneSoft { public : virtual void Operation () = 0; // 定义操作接口 virtual ~ AbstractPhoneSoft (); protected : AbstractPhoneSoft (); }; // 继承自 AbstractPhoneSoft, 是 AbstractPhoneSoft 的不同实现之一 class PhoneSoftAddressBook : public AbstractPhoneSoft { public : PhoneSoftAddressBook (); void Operation (); // 实现操作 ~ PhoneSoftAddressBook (); protected : }; // 继承自 AbstractPhoneSoft, 是 AbstractPhoneSoft 的不同

文档评论(0)

xiaowei110 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档