当某种业务功能已经实现,但它们与当前系统的接口不兼容,如果重新开发成本又很高,这时用适配器模式能很好地解决这些问题。
适配器模式是作为两个不兼容的接口之间的桥梁,属于结构型模式,它结合了两个独立接口的功能。
将一个类的接口转换成需要的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类能一起工作。
适配器模式的实现:
假设有两款不同年代的电脑,一台功率100W,另一台功率200W。但是现在只有一个100W的充电器,我们要让它为200W的电脑充电,这时候我们就需要创建一个适配器来完成这个工作。
1. 创建一个充电接口
该提供一个按类型充电的方法。
//提供一个按类型充电的方法
public interface Charge {
public void charge(String type);
}
2. 创建100W充电器接口
在这个接口中,提供一个方法可以为100W的电脑充电。
//100W充电器接口
public interface W100 {
public void charge100W();
}
3. 创建100W充电接口的实现类
//100W充电的实现类
public class W100Impl implements W100 {
@Override
public void charge100W() {
System.out.println("使用100W充电器给电脑充电");
}
}
4. 创建适配器
//适配器
public class ChargeAdapter implements Charge {
W100 w100;
public ChargeAdapter(String type){
if(type.equals("100w")){
w100 = new W100Impl();
}
}
@Override
public void charge(String type) {
w100.charge100W();
}
}
5. 创建200W充电器实体
//适配器
//200w充电器
public class W200 implements Charge {
ChargeAdapter chargeAdapter;
@Override
public void charge(String type) {
if(type.equals("200w")){
System.out.println("200W充电器正常充电");
}else if(type.equals("100w")) {
chargeAdapter = new ChargeAdapter(type);
chargeAdapter.charge(type);
}else{
System.out.println("功率不兼容,充电失败!!!");
}
}
}
6. 测试充电结果
public class AdapterMain {
public static void main(String[] args) {
W200 w200 = new W200();
//通过适配器使用100w充电器给200w电脑充电
System.out.print("过适配器使用100w充电器给200w电脑充电:");
w200.charge("100w");
//通过适配器使用300w充电器给200w电脑充电
System.out.print("过适配器使用300w充电器给200w电脑充电:");
w200.charge("300w");
}
}
从打印结果中我们可以看到,当使用100w充电器给200w电脑充电时,充电成功了;而使用300W充电器时,提示我们功率不兼容,这是因为我们只提供了100W的适配器,没有300W的适配器。如果想让300W的充电器给200W的电脑充电,那么就只需要按照上述步骤再添加一个300W适配器即可。
到此,我们实现了适配器模式,成功通过使用适配器让200W电脑兼容100W充电器,即使原本由于接口不兼容而不能一起工作的那些类能一起工作。
前面几节的内容供大家参考:
- 什么是设计模式:【每天一个java设计模式(零)】 - 设计模式基本概念及七大设计原则
- 工厂模式:【每天一个java设计模式(一)】 - 工厂模式
- 抽象工厂模式: 【每天一个java设计模式(二)】 - 抽象工厂模式
- 单例模式:【每天一个java设计模式(三)】 - 单例模式
- 原型模式:【每天一个java设计模式(四)】 - 原型模式
- 建造者模式: 【每天一个java设计模式(五)】 - 建造者模式
下一节:
代理模式: 【每天一个java设计模式(七)】 - 代理模式模式