适配器模式,转换不同接口,实现兼容。
特定环境
接口兼容
—使用现有类,但使用方式与原有方式不同,需要转换
—现有接口兼容第三方组件
—保留并使用原系统类的功能,但客户端访问方式发生变化,同时无法修改原有代码时相近功能类间的转换
一类问题
接口不兼容的类,不能协同合作
解决方案
3个角色:
- 目标接口 Target : 提供期待的使用方式,由类或接口实现
- 被适配者 Adaptee : 类原有使用方式,由类或接口实现
- 适配器 Adapter : 封装Adaptee引用,实现或继承Target,重写Target方法,封装Adaptee方法
类适配器和对象适配器
类适配器通过多重继承,来对接口进行匹配
Java不支持多重继承,暂不作讨论
优劣
优点:
- 复用类,减少开发量
- 可扩展原有类功能
- 可通过目标接口,使用多个被适配者
- 被适配者对接口使用者透明
- 目标接口和被适配者解耦
缺点:
对于对象适配器,适配器的编写或修改,较为复杂
因为,需要原系统提供接口(即被适配者的API),并需要理解其适用环境
参考
设计模式学习笔记-适配器模式, 作者: Wang Juqiang