Match interfaces of different classes therefore classes can work together despite the incompatible interfaces. 将一个类(对象)的接口(方法或者属性)转化为另外一个接口,以满足用户需求,使类(对象)之间的接口不兼容的问题通过适配器得到解决。


    动机:解决系统已有模块,和业界通用或者系统模块接口不匹配的问题。


    适用性:

    • 想使用一个已有的类,但它的接口不符合你的要求。
    • 想创建一个可复用的类,该类可以与其他不相关的类或者不可预见的类协同工作。

    结构代码和实现思路

    1. class RequesterAdapter {
    2. private requestObj;
    3. constructor(adaptee) {
    4. this.requestObj = adaptee;
    5. }
    6. public request() {
    7. this.requestObj.sendSpecificRequest();
    8. }
    9. }
    10. new RequesterAdapter(new XMLHttpRequest()).request();
    • 双向适配器能够适配多个类。

    举个栗子:

    Java I / O 中,InputStreamWriter 需要实现 Writer 的接口,但却基于 InputStream 来进行基础操作。所以它是一个 AdapterInputStream 适配了 Writer 的接口。


    协作:Adapter 负责接口满足调用者的要求,而 Adaptee 负责实现和调用不兼容的接口部分。


    关联:我们可以使用 Proxy 即代理对象来实现适配器。