适配器模式
适配器模式数据结构型设计模式.
适配器模式主要用于将2个不能兼容的物件结合在一起.分为类适配器和对象适配器.
比如由于2个类因为接口问题没办法在一起工作,可以使用适配器模式将其结合起来.
比如生活中的电源适配器,A物品需要100V电压,B物品需要220V电压,直接作用其中有一个无法达到效果,而电源适配器支持100~220V就可以完美解决这样的问题.
应用场景
- 重构过程中要具体使用当前某个类,但是因为接口问题无法兼容
- 具有统一输出性质,输入类型不确定的对象
- 第三方组件接口定义与自身的不同,在不修改自身接口的情况下要使用第三方组件接口
代码示例(类适配器)
(一)获取电压的接口
public interface Voltage {
void getVoltage();
}
(二)物件A实现电压接口获取220V电压
public class Voltage220 implements Voltage {
@Override
public void getVoltage() {
System.out.print("\n"+"正常物件B:获取220的电压");
}
}
(三)物件B的110V电压(重构过程中需要使用它又不能破坏之前的接口)
public void getVoltage100(){
System.out.print("\n"+"特殊物件B:获取100的电压");
}
}
(四)电源适配器
public class PowerAdapter extends Voltage100 implements Voltage{
@Override
public void getVoltage() {
super.getVoltage100();
}
}
继承原本的110V电压并且实现正常220V电压,统一到一个类进行处理
调用方式
Voltage voltage=new Voltage220();
voltage.getVoltage();
Voltage voltage1=new PowerAdapter();
voltage1.getVoltage();
根据自己的需要来选择创建符合需要的子类实现具体功能。
代码示例(对象适配器)
在上述的类适配器中使用的方式是先继承在实现具体的方法来进行适配,而对象适配器中则直接将对象进行关联,更为灵活方便.
(一)直接关联被适配类的适配器
public class AbstractPowerAdapter implements Voltage {
//适配类为100V电压
private Voltage100 voltage100;
public AbstractPowerAdapter(Voltage100 voltage100) {
this.voltage100 = voltage100;
}
@Override
public void getVoltage() {
voltage100.getVoltage100();
}
}
调用方式
Voltage100 voltage3=new Voltage100();
Voltage voltage4=new AbstractPowerAdapter(voltage3);
voltage4.getVoltage();
显示结果如同上述的类适配器一致.
对象适配器直接在构造参数中将适配的类进行关联,这样我们可以关联多个不同的适配类.
总结
-
优点
-
客户端调用同一个接口方法
-
目标类与适配类解耦
-
适配器可以将不同的适配类都适配到目标接口
-
缺点
-
整体修改适配器的实现过程复杂
-
项目中大量使用适配器模式,会让项目复杂.不利于整体维护使用
网友评论