适配器模式
分析
在软件开发中采用类似于电源适配器的设计和编码技巧
角色:
- Target:目标抽象类,定义客户要用的特定领域的接口
- Adapter:适配器类,可以调用另一个接口,作为一个转换器,对适配者
- 和抽象目标类进行适配
- Adaptee:适配者类,定义了一个存在的接口,这个接口需要适配。
分类:
-
类适配器模式,适配器类实现了目标抽象类接口并继承了适配者类,并在目
标抽象类的实现方法中调用所继承的适配者类的方法。(限制多)
-
对象适配器模式,适配器类继承了目标抽象类并定义了一个适配者类的对象
实例,在所继承的目标抽象类方法中调用适配者类的相应业务方法。(应用更广泛)
案例:手机充电,通过手机充电器将220V电压适配为5V
使用类适配器
/**
* 220V交流电(被适配者的角色)
*/
public class Ac {
public int outputAc(){
int srcV = 220;
System.out.println(srcV + "V交流电");
return srcV;
}
}
/**
* 5v直流电(目标对象的角色)
*/
public interface Dc {
int outputDc();
}
public class PhoneAdapter extends Ac implements Dc{
@Override
public int outputDc() {
// 获取220V交流电
int srcV = outputAc();
// 模拟适配器过程,转换为5v直流电
int targetV = srcV / 44;
System.out.println("电压已经适配为" + targetV + "V" );
return targetV;
}
}
public class Phone {
public void charge(Dc dc){
if(dc.outputDc() == 5){
System.out.println("电压正常,可以安全充电");
}else {
System.out.println("电压异常,危险!");
}
}
}
public class Test {
public static void main(String[] args) {
new Phone().charge(new PhoneAdapter());
}
}
使用对象适配器(重要)
修改手机适配器类
public class PhoneAdapter implements Dc {
private Ac ac;
public PhoneAdapter(Ac ac){
this.ac = ac;
}//对象适配过程
@Override
public int outputDc() {
// 获取220V交流电
int srcV = ac.outputAc();
// 模拟适配器过程,转换为5v直流电
int targetV = srcV / 44;
System.out.println("电压已经适配为" + targetV + "V" );
return targetV;
}
}
修改测试类
public class Test {
public static void main(String[] args) {
new Phone().charge(new PhoneAdapter(new Ac()));
}
}