结构型适配器设计模式
适配器模式
适配器个人理解下来他的使用场景一般是用于
- 在不改变原代码的基础上用适配器模式去改变他原有的代码(和代理模式是有区别的)
- 版本迭代也可以用这个模式
菜鸟:
适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。
这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。
我们通过下面的实例来演示适配器模式的使用。其中,音频播放器设备只能播放 mp3 文件,通过使用一个更高级的音频播放器来播放 vlc 和 mp4 文件。
涉及相关角色
- 被适配器(adaptee):原有的接口代码,需要被转换的代码
- 目标:他定义了客户端需要的标准,他是被适配器和适配器的中间标准和规则的转换层,可以这么理解。它可以是接口也可以是抽象类,
- 适配器(adapter):负责根据目标的标准和规范去实现转换的接口
分类
主要是适配器的继承和组合区别,组合就是在适配器中引用被适配器
- 类适配器:(使用继承)简单理解就是 类适配器中的适配器角色==继承==
被适配器和==实现==目标角色(注意看关键字,看示例也会知道区别) - 对象适配器:(使用组合)类适配器中的适配器角色==组合==
被适配器和==实现==目标角色(注意看关键字,看示例也会知道区别)
对象适配器的好处就可以多实现,而且继承也是空缺的,类适配器已经堵住了继承
类适配器
1 | // adaptee 被适配器 |
对象适配器
1 | // adaptee 被适配器 |
总结
适用场景:
- 已经存在的类,它的方法和需求不匹配(方法结构相同或相似)的情况。
- 使用第三方提供的组件,但组件接口定义和自己要求的接口定义不同。
优点:
- 能提高类的透明性和复用,现有的类复用但不需要改变。
- 目标类和适配器类解耦,提高程序的扩展性。
- 在很多业务场景中符合开闭原则。
缺点:
- 适配器编写过程需要全面考虑,可能会增加系统的复杂性。
- 增加代码阅读难度,降级代码可读性,过多使用适配器会使系统代码变得凌乱。
评论





