设计模式之适配器模式

使得原本由于接⼝不兼容⽽不能⼀起⼯作、不能统⼀管理的那些类可以⼀起⼯作、可以进⾏统⼀管理。

解决接⼝不兼容⽽不能⼀起⼯作问题,看下⾯⼀个⾮常经典的案例在中国,⺠⽤电都是220v交流电,但是⼿机锂电池⽤的都是5v直流电。因此,我们给⼿机充电时就需要使⽤电源适配器来进⾏转换。使⽤代码还原这个⽣活场景。

创建AC220类,表示220v交流电:

public class AC220 {
    public int outputAC220V() {
        int output = 220;
        System.out.println("输出交流电" + output + "V");
        return output;
    }
}    

创建DC5接⼝,表示5V直流电:

public interface DC5 {
    int outputDC5V();
}

创建电源适配器类 PowerAdapter

public class PowerAdapter implements DC5 {
    private AC220 ac220;
    public PowerAdapter(AC220 ac220) {
        this.ac220 = ac220;
    }
    public int outputDC5V() {
        int adapterInput = ac220.outputAC220V();
        // 变压器...
        int adapterOutput = adapterInput/44;
        System.out.println("使⽤ PowerAdapter 输⼊AC:" + adapterInput + "V输出DC:" + adapterOutput + "V");
        return adapterOutput;
    }
}    

客户端测试代码

public class AdapterTest {
    public static void main(String[] args) {
        DC5 dc5 = new PowerAdapter(new AC220());
        dc5.outputDC5V();
    }
}

在上⾯的案例中,通过增加电源适配器类PowerAdapter实现了⼆者的兼容

使用场景

适配器模式:让我们先模拟一下适配器模式的真实使用场景:一家互联网金融公司A,开发了一套股票交易系统,其包含客户端和服务器,用户登录接口是由客户端和服务器端自主协商的,目前这套系统已投入生产并稳定运行。某天,公司A接到一家证券公司的项目,需要把这套系统部署在这个证券公司中。此外,此证券公司还同时使用了公司B的客户端,因此,公司B的客户端需与公司A的服务器端相接。但公司B客户端的用户信息与公司a系统定义的类型不符,这时,该怎么办呢?
有三种解决方案。一,修改服务器的接口,以适应其他客户端的用户类型。二,增加接口,以处理另一个客户端的用户类型。三,在服务端执行用户处理接口前,调用一个方法,把其他客户端的用户类型转换成原本的用户类型。
方案一的缺点是他会修改到已经在生产环境上稳定运行的接口,影响系统的稳定性,且需要进行回归测试。方案二的缺点是,新增加的接口的业务逻辑会与原来的接口有所重复。而方案三即是适配器模式,它不仅有效地解决了问题,同时避免了前两种方案的弊端。
什么时候需要用适配器模式?只要记住一点。当你有动机修改一个已经投入生产的接口,这时候就可以考虑试用适配器模式。适配器模式是用于解决接口不兼容问题有效方法。
posted on 2020-10-02 21:43  lvguoliang(学无止境)  阅读(133)  评论(0)    收藏  举报