• 适配器模式详解和实现(设计模式 四)


    适配器模式将一个类的接口转换成客户端所期望的另一个接口,解决由于接口不兼容而无法进行合作的问题。

    设计基本步骤

    1. 创建目标接口(Target Interface),该接口定义了客户端所期望的方法。

    2.创建被适配类(Adaptee Class),该类是需要被适配的类,它包含了一些已经存在的方法。

    3. 创建适配器类(Adapter Class),该类实现了目标接口,并包含被适配对象的引用。

    4. 在适配器类中实现目标接口的方法,并在方法内部调用被适配类的方法。

    实例介绍运用

    假设我们正在开发一个电子支付业务,该系统需要与不同的支付服务提供商进行集成(支付宝、微信支付和银联支付),每个支付服务提供商都有自己的接口和方法来处理支付请求,我们希望将支付服务提供商的接口适配成了统一的支付接口(转换),我们可以使用适配器模式实现,这样三种支付方式我们都能同时处理。

    1. 创建目标接口

    1. public interface PaymentService {
    2. void pay(String paymentType, double amount);
    3. }

    2.创建被适配类

    1. public class AlipayService implements PaymentService {//支付宝支付
    2. @Override
    3. public void pay(String paymentType, double amount) {
    4. System.out.println("Alipay payment: " + amount + " CNY");
    5. }
    6. }
    7. public class WechatPayService implements PaymentService {//微信支付
    8. @Override
    9. public void pay(String paymentType, double amount) {
    10. System.out.println("WeChat payment: " + amount + " CNY");
    11. }
    12. }
    13. public class UnionPayService implements PaymentService {//银联支付
    14. @Override
    15. public void pay(String paymentType, double amount) {
    16. System.out.println("UnionPay payment: " + amount + " CNY");
    17. }
    18. }

    3. 创建适配器类、实现方法

    1. public class PaymentAdapter implements PaymentService {
    2. //被适配对象引用
    3. private AlipayService alipayService;
    4. private WechatPayService wechatPayService;
    5. private UnionPayService unionPayService;
    6. //初始化
    7. public PaymentAdapter() {
    8. alipayService = new AlipayService();
    9. wechatPayService = new WechatPayService();
    10. unionPayService = new UnionPayService();
    11. }
    12. @Override
    13. public void pay(String paymentType, double amount) {//实现统一支付逻辑
    14. if (paymentType.equalsIgnoreCase("Alipay")) {
    15. alipayService.pay(paymentType, amount);
    16. } else if (paymentType.equalsIgnoreCase("WeChatPay")) {
    17. wechatPayService.pay(paymentType, amount);
    18. } else if (paymentType.equalsIgnoreCase("UnionPay")) {
    19. unionPayService.pay(paymentType, amount);
    20. } else {
    21. //其他方式不支持
    22. System.out.println("Unsupported payment type: " + paymentType);
    23. }
    24. }
    25. }

    4.客户端简单实现

    1. public class Main {
    2. public static void main(String[] args) {
    3. PaymentService paymentService = new PaymentAdapter();
    4. paymentService.pay("Alipay", 10000.0);
    5. paymentService.pay("WeChatPay", 20000.0);
    6. paymentService.pay("UnionPay", 30000.0);
    7. paymentService.pay("ApplePay", 500.0);
    8. }
    9. }

  • 相关阅读:
    【stm32】外部中断接口函数
    2022年最新前端面试题,持续更新
    JVM指令手册
    简单的网页制作期末作业——电影泰坦尼克号(4页)
    [论文阅读]Visual Attention Network原文翻译
    CUDA和CuDNN安装
    产品经理的效率利器:揭秘提升工作效率的10大神器!
    Mac 电脑 maven 每次重启后,终端都失效的解决办法
    js 数组与对象相互转换
    libusb系列-002-Windows下libusb源码编译
  • 原文地址:https://blog.csdn.net/DU9999999/article/details/133500516