用于连接两种不同种类的对象,使其毫无问题地协同工作。
类适配器:通过继承来实现两个接口。
对象适配器:不继承被适配者,而是组合了一个对它的引用。
类适配器
Protocol: <A> Class: B Class: C
A可以被认为是抽象类,A的实例充当客户端的角色
B的实例充当被适配者的角色
C的实例充当适配器
实现: C遵循协议A, 同时继承B, C实现A的方法, 并且在实现的这个方法中调用B的方法([super someRequestInB])
Tip: OC就是这样通过实现协议同时又继承超类来实现多重继承的。
对象适配器
Protocol: <A> Class: B Class: C
A可以被认为是抽象类,A的实例充当客户端的角色
B的实例充当被适配者的角色
C的实例充当适配器
实现: C遵循协议A, 并且拥有一个B类对象当做自己的成员变量, 即保持一个对B类的引用。在实现A的方法中通过自身引用的B的实例去调用B的方法。由于这里C与B是包含关系,用这种方法去适配B的子类也没有什么问题。