8适配器模式
类适配器,继承实现
对象适配器,组合实现
如何选择?
- Adaptee接口的个数
- Adaptee、ITarget契合程度
Adaptee被适配者、ITarget目标接口
- 如果 Adaptee 接口并不多,那两种实现方式都可以
- Adaptee接口很多,而且 Adaptee 和 ITarget 接口定义大部分都相同,那我们推荐使用类适配器。Adaptor 复用父类 Adaptee 的接口,比起对象适配器的实现方式,Adaptor 的代码量要少一些。
- Adaptee 接口很多,而且 Adaptee 和 ITarget 接口定义大部分都不相同,那我们推荐使用对象适配器,因为组合结构相对于继承更加灵活。
应用
- 封装有缺陷的接口设计
- 统一多个类的接口设计
- 替换依赖的外部系统
- 兼容老版本接口
- 适配不同格式的数据
slf4j应用
Slf4j 的出现晚于 JUL、JCL、log4j 等日志框架,这些日志框架也不可能牺牲掉版本兼容性,将接口改造成符合 Slf4j 接口规范。
slf4j提供了针对不同日志框架的适配器。对不同日志框架的接口进行二次封装,适配成统一的Slf4j接口定义
代理模式:不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同
桥接模式:目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。
装饰器模式:装饰者模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。
适配器模式:事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口