简单工厂github
设计模式学习以外观模式设计模式
Demo传送门post
生活中相似适配器模式的比较简单的例子就是电源适配器,或者转接器,下面简要描述一个常见的例子:学习
我有一条苹果充电线,一开始我用的是15款的笔记本电脑,数据线能够直接和电脑链接,我想要经过电脑整理手机中的文件,直接就能够链接电脑。过了一段时间,我换了17新款电脑,发现数据线没法链接到电脑上了,这个时候我就须要一个转接头或者转换器,那么这个转换器就至关于适配器,是要将个人电脑插头和个人数据线插头给适配起来,使它们可以正常工做。设计
适配器的原理也是相似,下面咱们认识一下适配器的定义:cdn
将一个类的接口转换成客户但愿的另一个接口,适配器模式使得本来因为接口不兼容而不能一块儿工做的那些类能够一块儿工做。对象
划重点:主要是为了解决接口不兼容而生,也就是说之前已经存在了一部分,如今有另一部分须要融入进去,就须要转换器(适配器)blog
用一张UML图能够很好地说明适配器模式继承
这个是典型的对象适配器方法,稍后会讲解类适配器方法
从图中能够分析出,须要被适配的对象Adaptee本来拥有了一个方法existMethod,如今要将Adaptee中已存在的方法适配成Target中的方法,那么须要在Adapter中进行操做,稍后会给出源码示例:
UML结构图如上图所示,下面具体给出实现
目标接口,也就是客户端须要的接口
原有接口,即被适配对象
对象适配器
客户端调用
从这能够看出来,对象适配器中,适配器须要拥有被适配者
严格来讲,类适配器是要实现如图所示,须要同时继承Target,Adaptee,可是OC是没有多继承的,因此须要借助接口和继承的形式实现,以下图:
下面我直接展现类适配器的实现方法,Target和Adaptee和对象适配器同样:
优势
更好的复用性 若是已经有的功能,只是接口不兼容,经过此模式能很好地实现复用
更好的扩展性 适配器中能够新增新的功能
缺点
适配器的本质是转换匹配,复用功能,简而言之就是经过转换调用已有的实现,把已有的实现匹配成须要的接口
适配器使用的场景:
若是想要使用一个已经存在的类,可是这个存在的类的接口不符合需求
想要建立一个能够复用的类,这个类可能和一些不兼容的类一块儿工做,可使用适配器模式,须要什么就适配什么
想要使用一些已经存在的子类,可是不可能对每个子类都适配,因此能够选择对象适配器,直接适配这些子类的父类