Match interfaces of different classes therefore classes can work together despite the incompatible interfaces. 将一个类(对象)的接口(方法或者属性)转化为另外一个接口,以满足用户需求,使类(对象)之间的接口不兼容的问题通过适配器得到解决。
动机:解决系统已有模块,和业界通用或者系统模块接口不匹配的问题。
适用性:
- 想使用一个已有的类,但它的接口不符合你的要求。
- 想创建一个可复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。
结构代码和实现思路
class RequesterAdapter {private requestObj;constructor(adaptee) {this.requestObj = adaptee;}public request() {this.requestObj.sendSpecificRequest();}}new RequesterAdapter(new XMLHttpRequest()).request();
- 双向适配器能够适配多个类。
举个栗子:
Java I / O 中,InputStreamWriter 需要实现 Writer 的接口,但却基于 InputStream 来进行基础操作。所以它是一个 Adapter 让 InputStream 适配了 Writer 的接口。
协作:Adapter 负责接口满足调用者的要求,而 Adaptee 负责实现和调用不兼容的接口部分。
关联:我们可以使用 Proxy 即代理对象来实现适配器。
