适配器模式

​ 先不说定义,说到适配器,我们首先可能会想到笔记本电脑的电源适配器,这里存在三种角色

  • 第一种是就是笔记本电脑,他需要直流 5V 1A的电源(瞎写的,顺便吐槽一下祖传5V1A)
  • 第二种是家里用的电源,市电,交流220V
  • 第三种就是电源适配器,它可以把交流转换为直流。

​ 很明显市电无法直接作为电源提供给笔记本电脑,电源适配器起到了连接作用,在这里电源适配器改变了电源的交直流,使得市电能够为笔记本所用,下面来看代码中的一个场景,我们有一个Data类,里面有个list存放了一些数据

public class Data {
    List<String> list;
    Data(){
        //初始化list 从不可描述的地方获取数据
    }
    public List<String> getData(){
        return list;
    }
}

现在有个类需要获取JSON格式的数据,我们就可以适配出JsonData类

public class JsonData  {
    private Data data;
    JsonData(Data data){
        this.data = data;
    }
    public String getData(){
        // toJson在这里是一个把list转换为Json的函数
        String json = toJson(data.getData());
        return json;
    }
}

按照上面实际例子的三种角色,第一种是终端需要获得Json字符串,第二种是Data能提供List,第三种就是JsonData能够把List转为Json。

​ 适配器模式(Adapter)也叫做包装器模式(Wrapper),我们在适配的时候可能不会改变什么只是简单的包装一下,比如你喜欢上了另一个喜欢萌妹的汉子,但是你又不能变成萌妹怎么办,你可以选择穿上萌妹的衣服接近他,这里本质是没有改变的,你只是简单的包装了一下。另一个代码例子如下,从前有个人叫张三他特别喜欢Rap

public interface Play {
    public void play();
}

public class Zhang3 implements Rap{
    @Override
    public void R() {
        System.out.println("淡黄的长裙,蓬松的头发");
    }
}

有一天他们的好朋友赵四找张三出去玩,可想要玩需要继承Play接口,张三只继承了Rap接口只会Rap,不会玩啊,这可怎么办呢?

public interface Play {
    public void play();
}

public class Zhang3Wrapper implements Play {
    Zhang3 z3 = new Zhang3();
    @Override
    public void play() {
        z3.R();
    }
}

既然需要实现Play接口的才能玩,但是我张三只会Rap,这时就需要包装器出场了,继承了Paly接口就可以玩了,play方法里调用的还是Rap,因为张三只会Rap,这样就在不改变张三的情况下,适配了出去玩这件事情。例子举得有点奇怪,可能加深了理解难度,毕竟也没人看,不把自己绕蒙了就好。

总结

​ 将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在不改变原有类的情况下解决兼容问题,符合开闭原则。纯属个人理解,如果给读者造成误解,请多担待。

posted @ 2020-04-28 17:24  林静生寒  阅读(205)  评论(0编辑  收藏  举报