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
即代理对象来实现适配器。