持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第31天,点击查看活动详情
适配器模式
适配器模式(Adapter Pattern)将某个类的接口转换成调用方期望的形式或者说格式,主要目的是用来做兼容,让原本接口不匹配不能一起工作的两个类可以协同工作。适配器模式属于结构型模式,主要分为三类: 类适配器模式,对象适配器模式,接口适配器模式。
下面我们先来看看 类适配器
java 是但继承机制,所以类适配器需要继承src类 这一点算是一个缺点,因为要求dst必须是接口,有局限性。src类的方法在Adapter中会暴露出来,也增加使用成本,因为继承了src类,可以重写sec的类中方法使得Adapter的灵活性增强了。
下面我们看一个 手机充电 电压兼容的一个例子
类图:
先准备一个src 用来给类适配器继承
public class Voltage220V {
public int outPut220V(){
int src =220;
System.out.println("电压 = " + src+"伏");
return src;
}
}
第二步准备一个dst接口
public interface Voltage5V {
public int outPut5V();
}
第三步准备一个适配类
public class VoltageAdapter extends Voltage220V implements Voltage5V {
@Override
public int outPut5V() {
int srcv=outPut220V();
int dest=srcv/44;
System.out.println("将电压兼容到 5V");
return dest;
}
}
第四步准备一个 手机类并添加一个充电的方法
public class Phone {
public void charging(Voltage5V v){
int outPut5V = v.outPut5V();
if(outPut5V==5){
System.out.println("电压为5V,正常充电~~~~~");
}else if(outPut5V>5){
System.out.println("电压过高,不能正常充电~~~~~");
}
}
}
第五步 调用
public class Cilent {
public static void main(String[] args) {
System.out.println("类适配器模式");
Phone phone=new Phone();
phone.charging(new VoltageAdapter());
}
}
输出结果:
类适配器模式
电压 = 220伏
将电压兼容到 5V
电压为5V,正常充电~~~~~
对象适配器
将Adapter类作修改,不是继承src类而是持有src类的实例,已解决兼容性问题(聚合)。即就是持有src类 实现dst类接口完成 src到dst的适配。根据合成复用原则,在系统中尽量使用关联关系来代继承关系。对象适配器模式是适配器模式常用的一种。
对象适配器模式只需要修改适配类 将 src类持有(也可以理解为注入通过set方法 或者 构造器)
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V;
//同过set方法给voltage220V 赋值 当然你也可以用构造器
public void setVoltage220V(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int outPut5V() {
int srcv=voltage220V.outPut220V();
System.out.println("将电压兼容到 5V");
int dest=srcv/44;
return dest;
}
}
调用方:
public class Cilent {
public static void main(String[] args) {
System.out.println("对象配器模式");
Phone phone=new Phone();
VoltageAdapter voltageAdapter = new VoltageAdapter();
voltageAdapter.setVoltage220V(new Voltage220V());
phone.charging(voltageAdapter);
}
}
输出结果:
对象配器模式
电压 = 220伏
将电压兼容到 5V
电压为5V,正常充电~~~~~
接口适配器模式
默认适配器模式,当不需要全部实现接口提供的方法时,可先设计一个抽象类实现接口,并为该接口中的每一个方法提供一个默认实现,这样子类就可以选择性覆盖父类的方法进行重写实现需求分析。在jdk1.8 中 有接口的增强提供默认方法 其实现类可以选择性实现。
准备接口
public interface Mytest {
public int test001();
public int test002();
public int test003();
}
准备适配类
public abstract class TestAdapter implements Mytest{
@Override
public int test001() {
return 0;
}
@Override
public int test002() {
return 0;
}
@Override
public int test003() {
return 0;
}
}
应用调用
public class Cilent {
public static void main(String[] args) {
new TestAdapter(){
@Override
public int test001() {
//具体实现
return 0;
}
};
}
}
只需要实现业务场景中需要处理的方法去重写业务逻辑。这里有点像 jdk1.8的接口增强(是我自己的理解)
实践是检验真理的唯一方法! 明天见🥰🥰🥰