一、引言
2022.8.27 小雨,阴天,不能出去玩 ,不开心~
二、什么是适配器模式 ?
别名为包装器,将某个类的接口转换成客户端期望的另一个接口表示,主要的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。
主要分为三大类:类适配器模式 、 对象适配器模式 、接口适配器模式
三、UML图
- 被适配者角色(Adaptee): 对应的就是网线接口,被适配的角色
- 适配者角色(Adapter):对应的就是接口转换器,通过转换器把网线接口转换成USB接口
- 目标角色(Target):对应的就是USB接口,目标角色。
四、适用场景
- 系统需要使用一些现有的类,而这些类的接口(方法)不符合系统的需要,甚至没有这些类的源代码。
- 想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法
五、类适配器模式
案例: 就比如我现在有钱了,买了一台mac电脑,我想连接网线上网,可是呢,我的mac是USB接口的,网线是网线接口的,这个时候就需要接口转换器来进行适配。(可参考上面UML图)
代码实现:
1.需要适配的类
/**
* @Author WangYan
* @Date 2022/8/27 15:18
* @Version 1.0
* 被适配的类 : 网线
*/
public class Cable {
public void sw(){
System.out.println("开始上网了!");
}
}
2.适配的抽象类
/**
* @Author WangYan
* @Date 2022/8/27 15:22
* @Version 1.0
* 适配器抽象类
*/
public interface Adapter {
void adapterWx();
}
/**
* @Author WangYan
* @Date 2022/8/27 15:25
* @Version 1.0
* 具体的适配实现
*/
public class AdapterImpl extends Cable implements Adapter {
@Override
public void adapterWx() {
super.sw();
}
}
3.目标角色
/**
* @Author WangYan
* @Date 2022/8/27 15:21
* @Version 1.0
* 电脑
*/
public class Computer {
/**
* 电脑开始上网
* @param net
*/
public void lj(AdapterImpl net){
net.adapterWx();
}
}
4.客户端调用
/**
* @Author WangYan
* @Date 2022/8/27 16:23
* @Version 1.0
* Test 测试
*/
public class Test {
public static void main(String[] args) {
Computer computer = new Computer(); // 电脑
Cable cable = new Cable(); // 网线
AdapterImpl adapter = new AdapterImpl(); // 转换器
computer.lj(adapter);
}
}
五、对象适配器模式
对象适配器和类适配器的区别主要是在适配器实现的时候,类是单继承的方式,对象是组合。
/**
* @Author WangYan
* @Date 2022/8/27 15:25
* @Version 1.0
* 适配器的具体实现
*/
public class AdapterImpl implements Adapter {
private Cable cable;
public AdapterImpl(Cable cable) {
this.cable = cable;
}
@Override
public void adapterWx() {
cable.sw();
}
}
总结:
类适配器:采用单继承
对象适配器:采用聚合组合,这种在项目中比较常用
接口适配器:使用抽象类进行接口默认实现,子类有选择的进行覆盖实现
适配器模式最大的作用就是将原本不兼容的接口融合在一起工作,在实际开发中可根据实际情况来选择。
拜拜~
有任何问题欢迎大家指出~
Thank You !