java设计模式之适配器模式

适配器模式就是用来做适配的,它将不兼容的接口转换为可兼容的接口,让原本由于接口不兼容而不能一起工作的类可以一起工作。

对于这个模式,有一个经常被拿来解释它的例子,就是 USB 转接头充当适配器,把两种不兼容的接口,通过转接变得可以一起工作。

适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现。

假如我们这里有一个旧的Api,可能是之前的团队开发的,现在的客户端需要的是基于Target的接口

旧Api

/**
 * 旧的不兼容的接口
 */
public class Api {
    void fa() {
        System.out.println("I am Api.fa()");
    }
}

需要的基于Target的接口

/**
 * 目标要求的接口
 */
public interface Target {
    void f1();
}

旧API和新的客户端需求是不兼容的,这个时候我们就需要通过一个适配器来适配。

首先我们基于继承的方式来实现适配器

/**
 * 基于继承的适配器
 */
public class ApiAdapter extends Api implements Target{
    @Override
    public void f1() {
        System.out.println("I am ApiAdapter.f1()");
        fa();
    }
}

/**
 * 基于组合的适配器
 */
public class ApiAdapter2 implements Target{
    private Api api;

    public ApiAdapter2(Api api) {
        this.api = api;
    }

    @Override
    public void f1() {
        System.out.println("I am ApiAdapter2.f1()");
        api.fa();
    }
}

客户端调用

public class Client {
    public static void main(String[] args) {
        ApiAdapter apiAdapter = new ApiAdapter();
        apiAdapter.f1();

        ApiAdapter2 apiAdapter2 = new ApiAdapter2(new Api());
        apiAdapter2.f1();
    }
}

输出

I am ApiAdapter.f1()
I am Api.fa()
I am ApiAdapter2.f1()
I am Api.fa()

 

posted @ 2022-02-01 17:28  Mars.wang  阅读(392)  评论(0编辑  收藏  举报