前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式 ——— 适配器模式

设计模式 ——— 适配器模式

作者头像
tomas家的小拨浪鼓
发布2018-06-27 14:25:12
6600
发布2018-06-27 14:25:12
举报
文章被收录于专栏:木木玲木木玲

ADAPTER(适配器) ———— 类对象结构型模式

意图

将一个类的接口,转换成客户期望的另一个接口。适配器让原来接口不兼容的类可以合作无间。 现在,我们知道,这个模式可以通过创建适配器进行接口转换,让不兼容的接口变成兼容。这可以让客户从实现的接口解耦。如果在一段时间之后,我们想要改变接口,适配器可以将改变的部分封装起来,客户就不必为了应对不同的接口而每次跟着修改。

适配器模式的本质:转换匹配,复用功能。 适配器通过转换调用已有的实现,从而能把已有的实现匹配成需要的接口,使之能满足客户端的需要。也就是说转换匹配是手段,而复用已有的功能才是目的。

适用性

  • 如果你想要使用一个已经存在的类,但是它的接口不符合你的需求,这种情况可以使用适配器模式,来把已有的实现转换成你需要的接口
  • 如果你想创建一个可以复用的类,这个类可能和一些不兼容的类一起工作,这种情况可以使用适配器模式,到时候需要什么就适配什么
  • (仅适用于“对象”适配器)如果你想使用一些已经存在的子类,但是不可能对每一个子类都进行适配,这种情况可以选用对象适配器,直接适配这些子类的父类就可以了。

结构

“类”适配器使用多重继承对一个接口与另一个接口进行匹配

“类”适配器结构图

“对象”适配器依赖于对象组合

“对象”适配器结构图

  • Target 定义Client使用的与特定领域相关的接口。
  • Client 与符合Target接口的对象协同
  • Adaptee 定义一个已经存在的接口,这个接口需要适配
  • Adapter 对Adaptee的接口与Target接口进行适配

协作

Client在Adapter实例上调用一些操作。接着适配器调用Adaptee的操作实现这个请求。

适配器模式的实现

  • “对象”适配器 这个适配器模式充满着良好的OO设计原则:使用对象组合,以修改的接口包装被适配者:这种做法还有额外的优点,那就是,被适配者的任何子类,都可以搭配着适配器使用。
  • “类”适配器 “类”适配器需要多重继承才能够实现它,这在Java中是不可能的。但是当你在使用多重继承语言的时候,还是可能遇到这样的需求。 “对象”适配器 VS “类”适配器 “对象”适配器和“类”适配器使用两种不同的适配方式(分别是组合与继承)。“类”适配器继承了Target和Adaptee;而“对象”适配器利用组合的方式将请求传送给被适配者。 “类”适配器: a) 用一个具体的Adapter类对Adaptee和Target进行匹配。结果是当我们想要匹配一个类以及所有它的子类时,“类”适配器将不能胜任工作。 b) 是的Adapter可以重定义Adaptee的部分行为,因为Adapter是Adaptee的一个子类。 c) 仅仅引入了一个对象,并不需要额外的指针以间接得到adaptee。 “对象”适配器: a) 允许一个Adapter与多个Adaptee ———— 即Adaptee本身以及它的所有子类(如果有子类的话)一同工作。 b) 是的重定义Adaptee的行为比较困难。这就需要生成Adaptee的子类并且使得Adapter引用这个子类而不是Adaptee本身。
  • 智能适配器 在实际开发中,适配器也可以实现一些Adaptee没有实现,但是在Target中定义的功能,这种情况就需要在适配器的实现里面,加入新功能的实现,这种适配器被称为智能适配器。 如果要使用智能适配器,一般新加入的功能的实现,会用到很多Adaptee的功能,相当于利用Adaptee的功能来实现更高层的功能。当然也可以完全实现新加的功能,跟已有的功能都不靠边,变相是扩展了功能。
  • 适配多个Adaptee 适配器在适配的时候,可以适配多个Adaptee,也就是说实现某个新的Target的功能的时候,需要调用到多个模块的功能,适配多个模块的功能才能满足新接口的要求。
  • 缺省适配 缺省适配的意思是:为一个接口提供缺省实现。有了它,就不用直接去实现接口,而是采用继承这个缺省适配对象,从而让子类可以有选择的去覆盖实现需要的方法,对于不需要的方法,就使用缺省适配的方法就可以了。
  • 双向适配器 适配器也可以实现双向的适配,前面我们讲的都是把Adaptee适配成为Target,其实也可以把Target适配成为Adaptee,也就是说这个适配器可以同时当作Target和Adaptee来使用。在两个不同的客户需要用不同的方式查看同一个对象时,双向适配器尤其有用。

相关模式

  • 适配器模式 VS 装饰模式 适配器模式与装饰模式很类似,但仅仅是类似,造成这种类似的原因:两种设计模式在实现上都是使用的对象组合,都可以在转调组合对象的功能前后进行一些附加的处理,因此有这么一个相似性。它们的目的和本质都是不一样的。一般适配器适配是需要改变接口的;而装饰模式是不改接口的,无论多少层装饰都是一个接口。 装饰模式的本质是扩展包装的对象的行为或责任;而适配器模式本质是转换匹配,复用功能。
参考

《Head First 设计模式》 《设计模式:可复用面向对象软件的基础》 《研磨设计模式》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.11.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 意图
  • 适用性
  • 结构
  • 协作
  • 适配器模式的实现
  • 相关模式
    • 参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档