美文网首页
iOS设计模式-适配器模式

iOS设计模式-适配器模式

作者: 静谧的橘子 | 来源:发表于2018-06-26 11:05 被阅读19次

适配器模式:将复用类的接口转换成客户端希望的接口。(本质上就是复用的类的接口不能满足当前项目的需要,Adapter 模式使得原本由于接口不兼容而不能一起工作的复用类与现有项目兼容)

适用场景:1.已经存在的类的接口不符合我们的需求;
2.创建一个可以复用的类,使得该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作;
3.在不对每一个都进行子类化以匹配它们的接口的情况下,使用一些已经存在的子类。

适配器模式分为类适配器和对象适配器两种实现方式。

1.类适配器

要在OC中实现类适配器,首先需要有定义了客户端要使用的一套行为的协议,然后要用具体的适配器类来实现这个协议。适配器类同时也要继承被适配者。类适配器结构图如下所示: 类适配器结构.jpeg

从图中可以看到,Adapter是一个Target类型,同时也是Adaptee类型。它重载了Target的request方法,没有重载Adaptee中的specificRequest方法,而是在Adapter的request方法的实现中,调用父类的specificRequest方法。只有当Target是协议而不是类时,类适配器才能够用OC来实现,因为OC中是没有多重继承的。

2.对象适配器

与类适配器不同,对象适配器不继承被适配者,而是组合了一个对它的引用。对象适配器结构图如下所示: 对象适配器结构

从两个结构图可以看到,Target和Adapter的关系相同,Adapter和Adaptee之间的关系,由继承变成了关联。这种关系下,Adapter需要保持一个对Adaptee的引用。在request方法中,Adapter发送[_adaptee specificRequest]消息给Adaptee,以完成客户端的请求。

小结

适配器模式主要应用于“希望复用一些现存的类,但是接口又与复用环境要求不一致的情况”,在遗留代码复用、类库迁移等方面非常有用。

适配器模式有对象适配器和类适配器两种形式的实现结构,但是类适配器采用“多继承”的实现方式,带来了不良的高耦合,所以一般不推荐使用,另外,OC中也不支持多重继承。对象适配器采用“对象组合”的方式,更符合松耦合规范。

在以下各种情况下可以考虑使用适配器模式:
需要使用一个已经存在的类,而它的接口不符合新环境的规范。
想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。
代码

相关文章

  • iOS设计模式(5)策略模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(6)模板模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(7)建造者模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(4)抽象工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • iOS设计模式(1)简单工厂模式

    设计模式系列文章 《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象工厂...

  • iOS设计模式(2)工厂模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(3)适配器模式》《iOS设计模式(4)抽象...

  • iOS设计模式(8)外观模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(3)适配器...

  • 学习iOS设计模式第一章 适配器(Adapter)

    今天学习了iOS设计模式中的适配器模式,适配器有两种模式对象适配器模式-- 在这种适配器模式中,适配器容纳一个它包...

  • 【设计模式】适配器模式

    学习文章 iOS设计模式 - 适配器 适配器模式(Adapter):类适配器、对象适配器 类图 说明 类适配器: ...

  • 设计模式

    iOS设计模式(5)策略模式 iOS适配器设计模式其实就是对某个控件上的各个部分,用一个model来统一赋值,而在...

网友评论

      本文标题:iOS设计模式-适配器模式

      本文链接:https://www.haomeiwen.com/subject/wbhorftx.html