适配器模式的定义
定义: 将一个类的接口变换成客户端所期待的另一种接口, 从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作.
通俗的说, 就是有 A、B两个接口,
现在要求把A和B安装在一起使用, 两者的接口不一致, 怎么办? 引入一个物体C, 如下图:
引入C物体后, C适应了A的接口, 同时也适应了B的接口, 三者就可以进行组合了
其中的C物体就叫做适配器
适配器模式的类图如下:
其中各个角色:
- Target 目标角色: 该角色定义把其他类转换成哪种接口
- Adaptee 源角色: 定义要把谁转换成目标角色
- Adapter 适配器角色: 适配器模式的核心角色, 它的职责就是把源角色转换成目标角色.
大致代码如下:
适配器模式的应用
适配器模式的优点:
- 适配器模式可以让两个没有任何关系的类在一起运行
- 增加了类的透明性. 我们访问的Target 目标角色, 但是具体的实现都委托给了源角色, 而这些对高层模块是透明的
- 提高了类的复用度. 源角色在原有的系统中还可以正常使用, 而在目标角色中也可以充当新的演员
- 灵活性非常好. 某一天, 突然不想要适配器, 删除掉这个适配器就可以了, 其他代码都不用修改
适配器模式的使用场景:
适配器的使用场景只要记住一点就够了: 你有动机修改一个已经投产中的接口时, 适配器模式可能是最适合你的模式. 比如系统扩展了, 需要使用一个已有或新建立的类, 但这个类有不符合系统的接口等
适配器模式最好在详细设计阶段不要考虑它, 它不是为了解决还在开发阶段的问题, 而是解决正在服役的项目问题, 没有一个系统分析师会在详细设计的时候考虑使用适配器模式, 这个模式的主要场景是扩展应用中.
有时源角色并不单单是一个类, 可能是多个类, 这时使用继承明显不行, 因为java并不支持多继承, 这时可以使用类关联等方法, 只要适配器模式的思想不变, 如何实现有多种方法
适配器模式又叫做变压器模式, 也叫做包装模式(装饰模式也叫做包装模式)
适配器模式是一个补偿模式, 或者说是一个"补救"模式, 通常用来解决接口不相容的问题, 在百分之百的完美设计中是用不到的.