MST
星途 面试题库

面试题:Java适配器模式在旧系统扩展中对代码耦合度的影响

在基于Java适配器模式对旧系统进行功能扩展过程中,分析适配器模式是如何降低新代码与旧代码之间耦合度的?请结合实际代码示例阐述。
20.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

1. 适配器模式原理

适配器模式通过创建一个适配器类,将一个类的接口转换成客户希望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。在对旧系统功能扩展时,新代码依赖适配器类,而不是直接依赖旧代码的特定接口,从而降低耦合度。

2. 实际代码示例

假设旧系统有一个 OldPaymentSystem 类,提供支付功能,但接口不符合新需求。

// 旧系统类
class OldPaymentSystem {
    public void oldPay(String amount) {
        System.out.println("Using old payment system to pay: " + amount);
    }
}

新系统需要一个 Payment 接口。

// 新系统接口
interface Payment {
    void pay(double amount);
}

创建适配器类 PaymentAdapter 来适配旧系统类到新接口。

// 适配器类
class PaymentAdapter implements Payment {
    private OldPaymentSystem oldPaymentSystem;

    public PaymentAdapter(OldPaymentSystem oldPaymentSystem) {
        this.oldPaymentSystem = oldPaymentSystem;
    }

    @Override
    public void pay(double amount) {
        oldPaymentSystem.oldPay(String.valueOf(amount));
    }
}

在新代码中使用适配器。

public class NewSystem {
    public static void main(String[] args) {
        OldPaymentSystem oldPaymentSystem = new OldPaymentSystem();
        Payment paymentAdapter = new PaymentAdapter(oldPaymentSystem);
        paymentAdapter.pay(100.0);
    }
}

3. 降低耦合度分析

  • 接口解耦:新代码依赖 Payment 接口,而不是 OldPaymentSystem 的特定方法 oldPay。如果旧系统的支付逻辑发生变化,比如 OldPaymentSystem 类的方法名或参数类型改变,新代码只需要修改 PaymentAdapter 中的适配逻辑,而 NewSystem 中的主要业务代码无需变动。
  • 依赖替换:新代码通过 PaymentAdapter 间接与旧代码交互。如果未来有更好的支付系统替代 OldPaymentSystem,只需创建新的适配器类实现 Payment 接口,新代码部分无需大改,只需替换创建适配器实例的部分,这使得新代码对旧代码的依赖更加灵活,降低了耦合度。