适配器模式总结
适配器模式的主要功能就是将原有不兼容的接口或类的功能适配到目标接口中,使得原有的类可以在不修改其代码的情况下,与其他代码协同工作。
具体来说,适配器模式在以下情况下非常有用:
- 接口不兼容: 当系统中的两个接口不匹配时,引入适配器可以将一个接口的功能适配到另一个接口,使它们能够协同工作。
- 类的功能不符合需求: 当一个类的功能不符合当前系统的需求,但又不方便修改这个类时,通过适配器将其功能适配到目标接口,从而实现功能的复用。
- 旧代码和新代码整合: 在系统中引入新的代码时,为了与已有的旧代码协同工作,可能需要使用适配器将新代码适配到旧代码的接口或规范。
适配器模式提供了一种灵活的解决方案,允许不同的组件、接口或类在一起协同工作,而无需修改其原始实现。这种模式有助于保持代码的灵活性和可维护性,同时支持系统的演化和扩展。
适配器模式案例
假设有一个支付服务,支持多种支付方式,包括支付宝、微信、银联等。每个支付方式都有自己的支付接口,但是在系统中,我们希望通过一个统一的接口来进行支付。
首先,定义一个支付接口 PaymentProvider
:
public interface PaymentProvider {
void pay(double amount);
}
然后,有一个具体的支付方式类 AlipayPayment
:
public class AlipayPayment {
public void doAlipayPayment(double amount) {
System.out.println("Alipay payment of amount: " + amount);
// 具体的支付逻辑
}
}
现在,我们希望将 AlipayPayment
适配到 PaymentProvider
接口,使得它能够被系统统一调用。
创建一个适配器类 AlipayAdapter
:
javaCopy code
public class AlipayAdapter implements PaymentProvider {
private AlipayPayment alipayPayment;
public AlipayAdapter(AlipayPayment alipayPayment) {
this.alipayPayment = alipayPayment;
}
@Override
public void pay(double amount) {
// 调用 AlipayPayment 的支付方法
alipayPayment.doAlipayPayment(amount);
}
}
现在,通过适配器模式,我们可以将 AlipayPayment
适配到 PaymentProvider
接口,使得它能够通过统一的接口进行支付。
public class PaymentService {
public void processPayment(PaymentProvider paymentProvider, double amount) {
// 调用支付接口进行支付
paymentProvider.pay(amount);
}
public static void main(String[] args) {
PaymentService paymentService = new PaymentService();
// 使用支付宝适配器
AlipayPayment alipayPayment = new AlipayPayment();
PaymentProvider alipayAdapter = new AlipayAdapter(alipayPayment);
paymentService.processPayment(alipayAdapter, 100.0);
// 其他支付方式也可以通过类似的适配器方式接入
}
}
通过这个适配器,我们能够使用统一的 PaymentProvider
接口,调用不同支付方式的支付逻辑,实现了多种支付方式的统一接口,同时也方便了系统的扩展。这是适配器模式在支付服务中的简单应用场景。