说明
适配器模式可以将不匹配接口规范的类进行适配,解决不兼容的问题,具体看下面的例子。
UML
代码
以连接手机或电脑的接口为例,假设设备默认使用typec接口的数据线连接,并且此接口遵循了设备的连接规范,但我们又想通过lighting接口的数据线连接,并且这个lighting接口没有遵循设备的连接规范,所以需要一个适配器来适配,代码如下。
/**
* @author ctl
* @date 2021/1/15
* 连接规范
*/
public interface Connection {
void connect();
}
默认的连接器,实现接口规范
/**
* @author ctl
* @date 2021/1/15
* 这里是默认标准的连接器
*/
public class TypecConnection implements Connection {
@Override
public void connect() {
System.out.println("默认通过typec接口连接");
}
}
待适配的连接器,没有实现接口规范
/**
* @author ctl
* @date 2021/1/15
* 这里表示已存在的,不可被修改的一个连接器
*/
public class LightingConnection {
public void connect() {
System.out.println("通过lighting接口连接");
}
}
适配器
/**
* @author ctl
* @date 2021/1/15
* 适配器
*/
public class LightingAdapter extends LightingConnection implements Connection {
@Override
public void connect() {
super.connect();
}
}
测试类
/**
* @author ctl
* @date 2021/1/15
*/
public class AdapterMain {
public static void main(String[] args) {
// 使用适配器前,只能通过typec连接
Connection typecConnection = new TypecConnection();
typecConnection.connect();
// 使用适配器后,可以通过lighting连接
Connection lightingAdapter = new LightingAdapter();
lightingAdapter.connect();
}
}
结果
总结
上述只是最基本的一个demo,称为类的适配器,还有其他写法,比如将待适配的类作为属性放到适配器中,有委托执行的概念,称为对象适配器,这里就不再赘述了。
这种模式可以很好的将不兼容的类与接口进行兼容,使客户端在调用的时候是统一调用,并且可以在不修改原代码的前提下将不同的类适配到接口。