
以下是 适配器模式 (Adapter Pattern) 的详细介绍,包含定义、优缺点、应用场景及代码实现:
以下通过 电源适配器 的案例演示适配器模式,包含类适配器和对象适配器两种实现:
/**
* 目标接口:客户端期望的 5V 电压
*/
public interface FiveVolt {
int output5V();
}/**
* 适配者:现有的 220V 电源(需被适配的类)
*/
public class AC220V {
public int output220V() {
System.out.println("输出 220V 交流电");
return 220;
}
}/**
* 对象适配器:将 220V 转换为 5V(通过组合适配者)
*/
public class PowerAdapter implements FiveVolt {
private final AC220V ac220V; // 持有适配者对象
public PowerAdapter(AC220V ac220V) {
this.ac220V = ac220V;
}
@Override
public int output5V() {
int input = ac220V.output220V();
int output = input / 44; // 模拟电压转换
System.out.println("适配器将 " + input + "V 转换为 " + output + "V");
return output;
}
}/**
* 类适配器:通过继承适配者类实现(Java 单继承限制,需适配者为类)
*/
public class PowerClassAdapter extends AC220V implements FiveVolt {
@Override
public int output5V() {
int input = super.output220V(); // 直接调用父类方法
int output = input / 44;
System.out.println("类适配器输出:" + output + "V");
return output;
}
}public class Client {
public static void main(String[] args) {
// 对象适配器调用
AC220V ac220V = new AC220V();
FiveVolt adapter = new PowerAdapter(ac220V);
int volt = adapter.output5V();
System.out.println("客户端获得电压:" + volt + "V\n");
// 类适配器调用
FiveVolt classAdapter = new PowerClassAdapter();
volt = classAdapter.output5V();
System.out.println("客户端获得电压:" + volt + "V");
}
}输出 220V 交流电
适配器将 220V 转换为 5V
客户端获得电压:5V
输出 220V 交流电
类适配器输出:5V
客户端获得电压:5V+----------------+ +----------------+
| Target | <------+ | Adaptee |
+----------------+ +----------------+
| output5V() | | output220V() |
+----------------+ +----------------+
^ ^
| |
+----------------+ +----------------+
| Adapter | | |
+----------------+ +----------------+
| - adaptee:Adaptee | |
| output5V() | | |
+----------------+ +----------------+WindowAdapter)。
Java 中 Arrays.asList() 将数组适配为 List,Spring 的 HandlerInterceptorAdapter 简化拦截器实现,均是适配器模式的典型应用。掌握该模式可提升系统兼容性和扩展性。