1 前言
在面向对象软件设计中,有时候我们想把有用而经过精心测试的类,用于应用程序的其他新领域。但是,新功能需要新接口,而新接口与要复用的现有类不一致的情况非常普遍。我们不想为新的接口而重写可靠的类。
已有的类与新的接口之间不兼容的问题相当普遍,人们已为它找到了一个解决方案。这个解决方案广为使用,最终被编入设计模式,成为适配器。
2 详述
2.1 简述
适配器用于连接两种不同类型的对象,使其毫无问题地协同工作。有时它也称为“包装器”(wrapper)。适配器的主要作用是把被适配者的行为传递给管道另一端的客户端。
适配器模式:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能在一起工作的哪些类可以一起工作。
2.2 种类
(1)第一种是通过继承来适配两个接口,成为类适配器。要在Objective-C中实现类适配器,首先需要有定义了客户端要使用的一套行为的协议,然后要用具体的适配器来实现这个协议。适配器类同时也要继承被适配者。
(2)第二种是对象适配器。对象适配器不继承被适配者,而是组合了一个对它的引用。适配者与被适配者之间的关系从“属于”变成了“包含”。这种关系下,适配者保持一个对被适配者的引用。
2.3 类适配器与对象适配器的区别
(1)类适配器只针对单一的具体被适配者,把被适配者是配到目标接口;对象适配器可以适配多个被适配者及其子类。
(2)类适配器易于重载被适配者的行为,因为是通过直接的子类化进行的适配;对象适配器难以重载被适配者的行为,需要借助与子类的对象而不是被适配者本身。
(3)类适配器只有一个适配者对象,无需额外的指针间接访问被适配者;需要额外的指针以间接访问被适配者并适配其行为。
2.4 何时使用适配器模式
(1)已有的接口与需求不匹配;
(2)想要一个可复用的类,该类能够同可能带有不兼容接口的其他类协作;
(3)需要适配一个类的几个不同子类,可是让每一个子类去子类化一个类适配器又不现实。
2.5 委托与适配器关系
适配器模式:把类的接口变换成客户端需要的接口。这里的客户端他们是什么呢?是Cocoa Touch框架中的类。那么此处什么是Target(目标接口)呢?是一个委托协议。实现协议的具体类会是个适配器。那么什么是与框架不匹配需要适配的类呢?应用程序中的其他类。现在明白了为何委托模式其实是适配器模式。
我们之所以说委托模式主要是适配器模式,是因为委托机制可以实现某些其他设计模式的意图,比如装饰模式。委托模式的实现有时会跟其他设计模式混在一起。
3 结语
以上是所有内容,希望对大家有所帮助。