学习、梳理设计模式。
适配器模式
不兼容的转换为兼容的,为解决兼容问题而生。
实现方式可分为组合方式和继承方式。
举个例子,充电宝只能用二相电供电,但现在只有三相电该怎么办呢?
三相电实例
/**
* 三相电
*/
public class ThreePlug {
public void powerWithThree() {
System.out.println("使用三相供电");
}
}
二相电接口
/**
* 二相接口
*/
public interface TwoPlugInterface {
/**
* 二相电流供电
*/
void powerWithTwo();
}
充电宝
/**
* 充电宝
*/
public class PowerBank {
/**
* 需要二相供电
*/
private TwoPlugInterface twoPlugInterface;
public PowerBank(TwoPlugInterface twoPlugInterface) {
this.twoPlugInterface = twoPlugInterface;
}
public void power() {
twoPlugInterface.powerWithTwo();
}
}
组合方式
我们来定义个三相适配器(接收三相电,对外提供二相电)。
public class ThreePlugAdapter implements TwoPlugInterface {
private ThreePlug threePlug;
public ThreePlugAdapter(ThreePlug threePlug) {
this.threePlug = threePlug;
}
@Override
public void powerWithTwo() {
threePlug.powerWithThree();
}
}
测试一把
public class PowerBankTest {
public static void main(String[] args) {
// 现在只有三相电
ThreePlug threePlug = new ThreePlug();
// 通过三相转二相适配器进行转换
TwoPlugInterface twoPlugInterface= new ThreePlugAdapter(threePlug);
PowerBank powerBank = new PowerBank(twoPlugInterface);
powerBank.power();
}
}
输出
使用三相供电
继承方式
继承的方式从代码上来看比较简洁
public class ThreePlugAdapter extends ThreePlug implements TwoPlugInterface {
@Override
public void powerWithTwo() {
this.powerWithThree();
}
}
测试一把
public class PowerBankTest {
public static void main(String[] args) {
TwoPlugInterface twoPlugInterface = new ThreePlugAdapter();
PowerBank powerBank = new PowerBank(twoPlugInterface);
powerBank.power();
}
输出
使用三相供电