设计模式-适配器模式
适配器模式(Adapter Pattern)是一种结构型设计模式,用于将一个类的接口转换成客户端期望的另一个接口。适配器模式使得原本由于接口不兼容而无法工作的类能够一起工作。
适配器模式的角色组成:
- 目标接口(Target):
- 定义客户端需要的接口。
- 需要适配的类(Adaptee):
- 现有的接口或类,其接口与目标接口不兼容。
- 适配器类(Adapter):
- 实现目标接口,并通过内部调用需要适配的类的方法,使其行为符合目标接口。
- 客户端(Client):
- 通过目标接口与适配器类交互。
示例代码:电源适配器
问题背景
假设有一个设备只能使用 110V 电压,但我们当前提供的是 220V 电压。我们需要通过适配器将 220V 转换成 110V,使设备能够正常工作。
实现代码
// 目标接口(Target):设备需要的电压
interface Voltage110V {
void use110V();
}
// 被适配的类(Adaptee):现有的电压
class Voltage220V {
public void provide220V() {
System.out.println("提供220V电压");
}
}
// 适配器类(Adapter):将220V转换为110V
class VoltageAdapter implements Voltage110V {
private final Voltage220V voltage220V;
public VoltageAdapter(Voltage220V voltage220V) {
this.voltage220V = voltage220V;
}
@Override
public void use110V() {
System.out.println("通过适配器转换电压...");
voltage220V.provide220V();
System.out.println("电压已转换为110V,设备可以使用了!");
}
}
// 客户端(Client)
public class AdapterPatternExample {
public static void main(String[] args) {
// 创建被适配的220V电压
Voltage220V voltage220V = new Voltage220V();
// 创建适配器
Voltage110V adapter = new VoltageAdapter(voltage220V);
// 使用适配器提供的110V电压
adapter.use110V();
}
}
输出结果:
通过适配器转换电压...
提供220V电压
电压已转换为110V,设备可以使用了!
适配器模式的优点:
- 兼容性强:
- 通过适配器可以将已有的类复用到新的环境中。
- 灵活性高:
- 可以对类进行解耦,使原有类和客户端不需要直接交互。
- 符合开闭原则:
- 不需要修改现有的类,而是通过新增适配器类实现功能。
适配器模式的缺点:
- 系统复杂度增加:
- 如果过多地使用适配器,可能会使系统结构复杂化。
- 性能开销:
- 适配器增加了额外的间接层,可能会影响性能。
适配器模式的适用场景:
- 现有的类或方法的接口与目标接口不兼容,但需要将它们集成。
- 需要复用一些现有的类,但它们的接口与当前系统不兼容。
- 想要封装旧系统中的类,并使其与新系统的接口匹配。
适配器模式的常见应用:
- Java IO流中的适配器:
InputStreamReader将InputStream转换为Reader。
- 数据库访问框架:
- JDBC 驱动程序通过适配器实现统一的数据库访问接口。
- UI 框架:
- 将不同的事件处理方法适配到统一的接口中。
通过适配器模式,我们可以轻松解决接口不兼容的问题,实现类的复用和系统的灵活性。

浙公网安备 33010602011771号