先不说定义,说到适配器,我们首先可能会想到笔记本电脑的电源适配器,这里存在三种角色
- 第一种是就是笔记本电脑,他需要直流 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,这样就在不改变张三的情况下,适配了出去玩这件事情。例子举得有点奇怪,可能加深了理解难度,毕竟也没人看,不把自己绕蒙了就好。
总结
将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。在不改变原有类的情况下解决兼容问题,符合开闭原则。纯属个人理解,如果给读者造成误解,请多担待。