Java设计模式【适配器模式】-结构型

介绍

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许不兼容的接口之间进行协作。通过使用适配器模式,可以将一个类的接口转换成客户期望的另一个接口,从而使原本由于接口不兼容而不能一起工作的类可以协同工作。

两种类型

  1. 类适配器模式:使用继承的方式进行适配。
  2. 对象适配器模式:使用组合的方式进行适配。

结构

  1. 目标接口(Target):客户端期望的接口。
  2. 适配者(Adaptee):需要适配的接口。
  3. 适配器(Adapter):将适配者转换为目标接口的类。

应用场景

  1. 接口转换:当系统中有多个类的接口不兼容但需要协同工作时,可以使用适配器模式。
  2. 复用现有类:当希望复用一些现有的类,但接口不符合要求时,可以使用适配器模式。
  3. 统一接口:当需要创建一个统一的接口来表示一组不兼容的接口时,可以使用适配器模式。

Java实现示例

一个老的支付系统,提供了LegacyPayment接口,而我们现在希望使用一个新的支付接口ModernPayment。我们可以使用适配器模式来适配旧的接口,使其符合新的接口要求。

// 旧的支付接口
public interface LegacyPayment {
    void makePayment(double amount);
}

// 旧的支付接口实现
public class LegacyPaymentImpl implements LegacyPayment {
    @Override
    public void makePayment(double amount) {
        System.out.println("Payment made using legacy system: $" + amount);
    }
}
// 新的支付接口
public interface ModernPayment {
    void pay(double amount);
}
// 类适配器
public class PaymentAdapter extends LegacyPaymentImpl implements ModernPayment {
    @Override
    public void pay(double amount) {
        makePayment(amount); // 调用旧的支付系统方法
    }
}
// 对象适配器
public class PaymentAdapter implements ModernPayment {
    private LegacyPayment legacyPayment;

    public PaymentAdapter(LegacyPayment legacyPayment) {
        this.legacyPayment = legacyPayment;
    }

    @Override
    public void pay(double amount) {
        legacyPayment.makePayment(amount); // 调用旧的支付系统方法
    }
}
public class AdapterPatternDemo {
    public static void main(String[] args) {
        // 使用类适配器
        ModernPayment modernPayment1 = new PaymentAdapter();
        modernPayment1.pay(100.0);

        // 使用对象适配器
        LegacyPayment legacyPayment = new LegacyPaymentImpl();
        ModernPayment modernPayment2 = new PaymentAdapter(legacyPayment);
        modernPayment2.pay(200.0);
    }
}

Spring中使用场景

在Spring框架中,适配器模式被广泛应用。例如,Spring MVC中的HandlerAdapter接口就是适配器模式的一个典型应用。

Spring MVC中的HandlerAdapter

在Spring MVC中,HandlerAdapter用于将不同类型的处理器适配为统一的接口。Spring MVC允许开发者使用各种不同类型的处理器(如Controller接口、注解控制器等),通过HandlerAdapter,Spring MVC可以统一处理这些不同类型的处理器。


总结

适配器模式是一个非常有用的设计模式,它能够使接口不兼容的类协同工作,增加代码的复用性和灵活性。通过适配器模式,可以在不修改现有类的情况下,扩展系统的功能。

在Java中,适配器模式广泛应用于各类框架和库中,例如Java的java.util.Arrays类中的asList方法就使用了适配器模式将数组适配为List接口。Spring框架中的HandlerAdapter也是适配器模式的一个典型应用,通过HandlerAdapter,Spring MVC可以统一处理各种不同类型的处理器。通过理解和应用适配器模式,可以有效地解决实际开发中接口不兼容的问题,提升系统的可维护性和可扩展性。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值