Objective-C 设计模式-适配器模式 (Adapter)
适配器模式定义
适配器模式(Adapter),将一个类的结构转换成用户希望的另一个接口,使得原本接口不兼容的类能在一起工作。换句话说,适配器模式就是链接两种不同种类的对象,使其很好的协同工作。适配器模式有两种实现方式:
- 类适配器模式,只针对单一的具体Adaptee类,把Adpatee适配到Target。通过直接子类化Adpatee类进行适配,易于重载Adpatee行为。
2. 对象适配器,可以是适配多个Adaptee类,需要包含Adaptee的引用,以间接访问Adaptee并适配其行为。
适配器模式使用场景
- 已有的类的接口和需求匹配
- 想定义一个可复用的类,该类可能有带不兼容接口的其他类协作。
- 需要适配一个类的几个不同子类,如果让每一个子类去子类化一个类适配器又不现实,那么可以使用对象适配器来适配其父类的接口。
适配器模式在ios中的应用
在Cocoa Touch框架中,委托模式delegate应用相当广泛,委托模式可以认为它主要是适配器模式,它实现了适配器模式的意图,其中委托协议是一个Target目标接口,实现委托协议的对象就是Adapter,而程序中的其他类是Adaptee。下面是实现UITableView的结构图:
适配器模式的优缺点
优点
- 使得客户端类和Adaptee类之间解耦,灵活性和扩展性都非常好,符合开闭原则。
- 增加了类的透明性和复用性,将具体的实现封装在Adaptee类中,对于客户端类来说是透明的,而且提高了Adaptee的复用性。
- 类适配器是直接子类化适配的,使得易于重载Adaptee的行为,使Adapter的灵活性更强。
- 对象适配器可以适配多个Adaptee类。
缺点
- 对于Java、Objective-C等不支持多重继承的语言,类适配器只能针对单个Adaptee类,不能将多个Adaptee类适配到目标接口。
- 对象适配器难以重载Adaptee的行为,需要通过Adaptee的子类而不是Adaptee本身。