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;}@Overridepublic 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转换为5VVoltage5V voltageAdapter = new VoltageAdapter(voltage220V);// 3. 手机使用适配器充电Phone phone = new Phone();phone.charging(voltageAdapter); // 输出:电压5V,充电成功!}
}
具体执行流程
- 客户端(Phone) 调用
charging()
方法,传入适配器对象。 - 适配器(VoltageAdapter) 内部调用被适配者
Voltage220V
的output220V()
。 - 适配器 将 220V 转换为 5V,返回给客户端。
- 客户端 根据返回值判断是否充电成功。
总结代码特点
- 不修改原有代码:
Voltage220V
原有逻辑不变。 - 通过适配器桥接:适配器实现目标接口,内部调用被适配对象。
- 客户端统一调用:客户端只依赖目标接口,无需知道底层细节。