面试题答案
一键面试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
接口,新代码部分无需大改,只需替换创建适配器实例的部分,这使得新代码对旧代码的依赖更加灵活,降低了耦合度。