定义:有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类能在一起工作,做法是将类自己的接口包裹在一个已存在的类中。
角色
- Target:目标抽象类
- Adapter:适配器类
- Adaptee:适配者类
- Client:客户类
类图:
实例:
比如iPhone的手机卡是特别小的Nano卡,把Nano卡拿到的其他手机上不能贴合卡槽尺寸,所以我们需要加一个复合卡槽尺寸的卡套
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| @protocol StandardSIMSizeProtocol <NSObject>
- (void)normalSize;
@end
@protocol NanoSIMSizeProtocal <NSObject>
- (void)nanoSize;
@end
@interface NanoAdapter : SIMCard <StandardSIMSizeProtocol>
@property (nonatomic, strong) NanoSIMCard *nanoSIMCard;
@end
@implementation NanoAdapter
- (void)normalSize{}
@end
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @interface NormalPhone : Phone
- (void)setSimCard:(SIMCard *)simCard;
@end
@implementation NormalPhone
- (void)setSimCard:(SIMCard *)simCard { [simCard normalSize]; }
@end
|
1 2 3 4 5 6 7 8 9 10 11
| StandardSIMCard *standardCard = [StandardSIMCard new]; NormalPhone *phone = [NormalPhone new]; [phone setSimCard:standardCard];
NanoSIMCard *nanoCard = [NanoSIMCard new]; NanoAdapter *nanoAdapter = [NanoAdapter new]; nanoAdapter.nanoSIMCard = nanoCard; [phone setSimCard:nanoAdapter];
|
实例角色:
Target:目标抽象类 |
Adapter:适配器类 |
Adaptee:适配者类 |
Client:客户类 |
SIMCard |
NanoAdapter |
NanoSIMCard |
NormalPhone |
优点:
- 适配器不需要改变现有的类,提高类的复用性
- 目标类和适配器类解耦, 提高扩展性,完全符合“开闭原则”
缺点:
成功案例
总结:
- 在两套系统都比较复杂的情况下,可通过适配器做适配,影响较小