1.目标接口
//客户端期望的接口(例如:5V充电接口)
public interface Voltage5V {
int output5V(); // 输出5V电压的方法
}
2.被适配者
//现有的220V电源(需要被转换成5V)
public class Voltage220V {
public int output220V() {
System.out.println("输出220V电压");
return 220; // 返回实际电压值
}
}
3.适配器
//实现目标接口,并持有被适配者的引用
public class VoltageAdapter implements Voltage5V {
private Voltage220V voltage220V; // 组合被适配者
// 构造器传入被适配对象
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public int output5V() {
// 调用被适配者的方法,并转换电压
int srcVoltage = voltage220V.output220V();
int dstVoltage = srcVoltage / 44; // 模拟电压转换(220V -> 5V)
System.out.println("适配器转换电压:" + dstVoltage + "V");
return dstVoltage;
}
}
4.客户端
// 手机充电(需要5V电压)
public class Phone {
// 充电方法(依赖5V接口)
public void charging(Voltage5V voltage5V) {
int voltage = voltage5V.output5V();
if (voltage == 5) {
System.out.println("电压5V,充电成功!");
} else {
System.out.println("电压不符,充电失败!");
}
}
}
5.测试类
public class AdapterDemo {
public static void main(String[] args) {
// 1. 创建一个220V电源
Voltage220V voltage220V = new Voltage220V();
// 2. 创建适配器,将220V转换为5V
Voltage5V voltageAdapter = new VoltageAdapter(voltage220V);
// 3. 手机使用适配器充电
Phone phone = new Phone();
phone.charging(voltageAdapter); // 输出:电压5V,充电成功!
}
}
具体执行流程
- 客户端(Phone) 调用
charging()
方法,传入适配器对象。 - 适配器(VoltageAdapter) 内部调用被适配者
Voltage220V
的output220V()
。 - 适配器 将 220V 转换为 5V,返回给客户端。
- 客户端 根据返回值判断是否充电成功。
总结代码特点
- 不修改原有代码 :
Voltage220V
原有逻辑不变。 - 通过适配器桥接:适配器实现目标接口,内部调用被适配对象。
- 客户端统一调用:客户端只依赖目标接口,无需知道底层细节。