设计模式之Adapter模式摘要.pptVIP

  1. 1、本文档共17页,可阅读全部内容。
  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文档。上传文档
查看更多
Adapter(适配器) ——类对象结构型模式 张晶晶 适配:即在不改变原有实现的基础上,将原来不兼容的接口转换为兼容的接口 适配的概念无处不在... 动机(Motivation) 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不能满足的。 如何应对这种“迁移的变化”?如何既能利用现有对象的良好实现,同时又能满足新的应用环境所要求的接口? 将一个类的接口转换成客户希望的另一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 ——《设计模式》GoF 意图(Intent) 以下情况使用Adapter模式: 你想使用一个已经存在的类,而他的接口不符合你的要求 你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作 (仅适用于对象Adapter)你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。 适用性(applicability) 类适配器使用多重继承对一个接口与另一个接口进行匹配(继承模式) 定义Client使用的与特定领域相关的接口 定义一个已经存在的接口,这个接口需要适配 对Adaptee的接口与Target接口进行适配 与符合Target接口的对象协同 结构(Structure) 例如: 我们有一个Team为外界提供S类服务,但是我们Team里面没有能够完成此项人物的成员,然后我们得知有A可以完成这项服务(他把这项任务重新取了个名字叫S’,并且他不对外公布他的具体实现)。为了保证我们对外的服务类别的一致性(提供S服务),我们有以下两种方式解决这个问题: 1)把A君直接招到我们Team为我们工作,提供S服务的时候让A君去办就是了; 2)A君可能在别的地方有工作,并且不准备接受我们的招安,于是我们Team可以想这样一种方式解决问题:我们安排B君去完成这项任务,并做好工作,让B君工作的时候可以向A君请教,因此B君就是一个复合体(提供S服务,但是是A君的继承弟子)。(这是一种继承模式) 对象适配器依赖于对象组合(组合模式) 协作:Client在Adapter实例上调用一些操作。接着适配器调用Adaptee的操作实现这个请求。 结构(Structure) 例如: 在软件系统设计和开发中,我们为了完成某项工作购买了一个第三方的库来加快开发,这就带来一个问题:我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类(不能在一起工作)可以在一起工作了,Adapter模式提供了将一个类(第三方库)的接口转化为客户(购买使用者)希望的接口。 比较(Different) 类适配与对象适配器有不同的权衡 类适配器 对象适配器 ①一个Adapter不能与Adaptee的子类进行匹配,所以不可以与它本身极其子类同时工作 ②Adapter是Adaptee的一个子类,可以重定义Adaptee的部分行为 ③仅需要引入一个对象,而无需额外的指针以间接得到Adaptee ①允许一个Adapter与多个Adaptee(即Adaptee本身以及它的所有子类)同时工作。 ②重定义Adapter的行为比较困难。需要生成Adaptee的子类并且使得Adapter引用这个子类而不是引用Adaptee本身 ③Adapter也可以一次给所有的Adaptee添加功能 例子(Example) 在中国大陆,使用中式插座(COutlet)。到了英国使用英式插座(EOutlet)。此时,英国的电子设备需要在中式插座上充电,就得买一个插座转换器(CEOutletAdapter)来,使两个不匹配的接口可以正常工作。插座转换器就是适配器(Adapter),英式插座是适配者(Adaptee)。 本例代码使用对象适配器方式,这样的好处是,适配器可以有多个适配者,譬如我要兼容美式插座,只需要新增美式插座AOutlet,并且将AOutlet作为CEOutletAdapter的成员即可。 结构图 Adapter Target Adaptee //适配器基类Target, 中式插座 class COutlet { public: virtual ~COutlet(){}; virtual void CPlug(){}; //中式插头 }; //适配者Adaptee, 英式插头 class EOutlet { public: void EPlug() { cout 使用英式插座 endl; } }; 代码示例 //适配器Adapter,使用对象适配器方式 cl

文档评论(0)

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

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

1亿VIP精品文档

相关文档