在软件开发中,我们经常遇到系统升级或整合第三方库时需要兼容旧接口的情况。直接修改原有代码不仅风险高,而且违反开闭原则。这时候,适配器模式(Adapter Pattern)就成为了拯救我们的利器。
什么是适配器模式?
适配器模式是一种结构型设计模式,将一个类的接口转换成客户期望的另一个接口,使原本接口不兼容的类可以一起工作。这就像现实世界中的电源适配器,让美规插头能在中国的插座上使用。
两种实现方式
1. 类适配器:通过继承实现
// 目标接口
interface USB {
void connect();
}
// 被适配者
class TypeC {
public void typeConnect() {
System.out.println("Type-C连接建立");
}
}
// 适配器
class TypeCToUSBAdapter extends TypeC implements USB {
@Override
public void connect() {
super.typeConnect(); // 调用被适配者的方法
}
}
2. 对象适配器:通过组合实现(推荐)
class TypeCToUSBAdapter implements USB {
private TypeC typeC;
public TypeCToUSBAdapter(TypeC typeC) {
this.typeC = typeC;
}
@Override
public void connect() {
typeC.typeConnect();
}
}
实战应用示例
假设我们在开发一个支付系统,需要同时支持支付宝和微信支付:
// 统一支付接口
interface Payment {
void pay(double amount);
}
// 支付宝支付
class Alipay {
public void alipayPayment(double money) {
System.out.println("支付宝支付:" + money + "元");
}
}
// 微信支付
class WechatPay {
public void wechatPay(double value) {
System.out.println("微信支付:" + value + "元");
}
}
// 支付宝适配器
class AlipayAdapter implements Payment {
private Alipay alipay;
public AlipayAdapter(Alipay alipay) {
this.alipay = alipay;
}
@Override
public void pay(double amount) {
alipay.alipayPayment(amount);
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Payment payment1 = new AlipayAdapter(new Alipay());
Payment payment2 = new WechatPayAdapter(new WechatPay());
payment1.pay(100.0); // 支付宝支付:100.0元
payment2.pay(200.0); // 微信支付:200.0元
}
}
模式优势与适用场景
优势:
- 提高类的透明性和复用性
- 符合开闭原则,不需要修改原有代码
- 解耦目标类和适配者类
适用场景:
- 系统需要使用现有类,但这些类的接口不符合要求
- 想要创建一个可以复用的类,与一些彼此之间没有太大关联的类一起工作
- 需要统一多个不同接口的功能
对象适配器相比类适配器更具灵活性,因为它采用组合而非继承,符合"组合优于继承"的原则,能够适配多个不同的适配者。
适配器模式是系统集成和重构中的常用模式,它就像软件世界中的"万能转换器",让不兼容的接口能够协同工作,是每个Java开发者都应该掌握的重要设计模式。
1062

被折叠的 条评论
为什么被折叠?



