策略+适配器模式详解

文章目录

    • 1.策略模式
        • 1.目录结构
        • [2.Strategy.java 策略接口](#2.Strategy.java 策略接口)
        • [3.StrategyA.java 策略A](#3.StrategyA.java 策略A)
        • [4.StrategyB.java 策略B](#4.StrategyB.java 策略B)
        • [5.StrategyC.java 策略C](#5.StrategyC.java 策略C)
        • [6.Context.java 策略上下文](#6.Context.java 策略上下文)
        • [7.Client.java 客户端](#7.Client.java 客户端)
        • 8.小结
    • 2.适配器模式
        • 1.目录结构
        • [2.CustomPaymentProcessor.java 自己的支付接口](#2.CustomPaymentProcessor.java 自己的支付接口)
        • [3.PayPalPaymentService.java 第三方的支付服务](#3.PayPalPaymentService.java 第三方的支付服务)
        • [4.PayPalPaymentAdapter.java 第三方适配器](#4.PayPalPaymentAdapter.java 第三方适配器)
        • [5.Client.java 客户端](#5.Client.java 客户端)
        • 6.小结

1.策略模式

1.目录结构
2.Strategy.java 策略接口
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略接口
 *
 * @Author sun
 * @Create 2025/2/7 12:17
 * @Version 1.0
 */
public interface Strategy {

    /**
     * 算法接口
     */
    void algorithmInterface();
}
3.StrategyA.java 策略A
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略A
 *
 * @Author sun
 * @Create 2024/8/12 20:05
 * @Version 1.0
 */
public class StrategyA implements Strategy{
    @Override
    public void algorithmInterface() {
        System.out.println("策略A");
    }
}
4.StrategyB.java 策略B
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略B
 *
 * @Author sun
 * @Create 2024/8/12 20:05
 * @Version 1.0
 */
public class StrategyB implements Strategy{
    @Override
    public void algorithmInterface() {
        System.out.println("策略B");
    }
}
5.StrategyC.java 策略C
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略C
 *
 * @Author sun
 * @Create 2024/8/12 20:05
 * @Version 1.0
 */
public class StrategyC implements Strategy{
    @Override
    public void algorithmInterface() {
        System.out.println("策略C");
    }
}
6.Context.java 策略上下文
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 策略上下文,根据不同的策略执行不同的算法
 *
 * @Author sun
 * @Create 2025/2/7 12:17
 * @Version 1.0
 */
public class Context {

    /**
     * 策略的属性
     */
    private Strategy strategy;

    /**
     * 在创建对象的时候就指定不同的策略
     * @param type
     */
    public Context(int type) {
        switch (type) {
            case 1:
                strategy = new StrategyA();
                break;
            case 2:
                strategy = new StrategyB();
                break;
            case 3:
                strategy = new StrategyC();
                break;
            default:
                break;
        }
    }

    /**
     * 调用具体的算法
     */
    public void contextInterface() {
        strategy.algorithmInterface();
    }
}
7.Client.java 客户端
java 复制代码
package com.sunxiansheng.design_pattern.strategy;

/**
 * Description: 客户端
 *
 * @Author sun
 * @Create 2025/2/7 12:19
 * @Version 1.0
 */
public class Client {

    public static void main(String[] args) {
        // 策略工厂中定义具体的策略
        Context context = new Context(1);
        // 调用方法时,就会指定具体的策略
        context.contextInterface();
    }
}
8.小结

策略模式,首先要定义一个策略接口,然后每个具体的策略都要去实现这个策略接口,接下来就要有一个上下文,这个上下文可以根据不同的类型来设置不同的策略。

2.适配器模式

1.目录结构
2.CustomPaymentProcessor.java 自己的支付接口
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 自定义的支付接口
 *
 * @Author sun
 * @Create 2025/2/9 11:05
 * @Version 1.0
 */
public interface CustomPaymentProcessor {

    void processPayment(double amount);
}
3.PayPalPaymentService.java 第三方的支付服务
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 第三方支付服务(需要适配的接口)
 *
 * @Author sun
 * @Create 2025/2/9 11:06
 * @Version 1.0
 */
public class PayPalPaymentService {

    public void makePayment(double amountInDollars) {
        System.out.println("Payment made using PayPal: $" + amountInDollars);
    }
}
4.PayPalPaymentAdapter.java 第三方适配器
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 适配器类,用来将第三方的PayPal支付接口适配到系统自定义的支付接口上
 *
 * @Author sun
 * @Create 2025/2/9 11:07
 * @Version 1.0
 */
public class PayPalPaymentAdapter implements CustomPaymentProcessor {

    /**
     * 注入第三方接口
     */
    private PayPalPaymentService payPalPaymentService;

    public PayPalPaymentAdapter(PayPalPaymentService payPalPaymentService) {
        this.payPalPaymentService = payPalPaymentService;
    }

    /**
     * 将第三方接口适配,使其满足自己接口的要求
     *
     * @param amount
     */
    @Override
    public void processPayment(double amount) {
        System.out.println("适配过的接口");
        payPalPaymentService.makePayment(amount);
    }
}
5.Client.java 客户端
java 复制代码
package com.sunxiansheng.design_pattern.adapter;

/**
 * Description: 客户端
 *
 * @Author sun
 * @Create 2025/2/9 11:08
 * @Version 1.0
 */
public class Client {

    public static void main(String[] args) {
        // 第三方的支付Service
        PayPalPaymentService payPalPaymentService = new PayPalPaymentService();
        // 自己的适配器聚合第三方支付
        PayPalPaymentAdapter payPalPaymentAdapter = new PayPalPaymentAdapter(payPalPaymentService);
        // 使用适配器调用方法
        payPalPaymentAdapter.processPayment(100.0);
    }
}
6.小结

适配器模式其实就是自己有一个接口,然后第三方有一个服务,就需要一个适配器,这个适配器就需要实现自己的接口,然后聚合第三方的接口,来完成自己接口的对应功能。

相关推荐
小梁不秃捏2 小时前
深入浅出Java虚拟机(JVM)核心原理
java·开发语言·jvm
我不是程序猿儿3 小时前
【C】识别一份嵌入式工程文件
c语言·开发语言
软件开发技术局4 小时前
撕碎QT面具(8):对控件采用自动增加函数(转到槽)的方式,发现函数不能被调用的解决方案
开发语言·qt
周杰伦fans5 小时前
C#中修饰符
开发语言·c#
yngsqq5 小时前
c# —— StringBuilder 类
java·开发语言
赔罪6 小时前
Python 高级特性-切片
开发语言·python
星星点点洲6 小时前
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
java·mysql
xiaolingting6 小时前
JVM层面的JAVA类和实例(Klass-OOP)
java·jvm·oop·klass·instanceklass·class对象
风口上的猪20157 小时前
thingboard告警信息格式美化
java·服务器·前端
子豪-中国机器人7 小时前
2月17日c语言框架
c语言·开发语言