策略+适配器模式详解

文章目录

    • 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.小结

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

相关推荐
珹洺1 小时前
C++从入门到实战(十)类和对象(最终部分)static成员,内部类,匿名对象与对象拷贝时的编译器优化详解
java·数据结构·c++·redis·后端·算法·链表
coderzpw1 小时前
设计模式中的“万能转换器”——适配器模式
设计模式·适配器模式
一 乐1 小时前
网红酒店|基于java+vue的网红酒店预定系统(源码+数据库+文档)
java·开发语言·数据库·毕业设计·论文·springboot·网红酒店预定系统
DARLING Zero two♡1 小时前
C++底层学习精进:模板进阶
开发语言·c++·模板
勘察加熊人2 小时前
c++生成html文件helloworld
开发语言·c++·html
xyliiiiiL3 小时前
从责任链模式聊到aware接口
java·开发语言
Elec_z4 小时前
网络深处的守门人
开发语言·网络
闪电麦坤955 小时前
C#:Time.deltaTime
开发语言·c#
码农老起6 小时前
与Aspose.pdf类似的jar库分享
java·pdf·jar
程序猿小D6 小时前
第三百八十九节 JavaFX教程 - JavaFX WebEngine
java·eclipse·intellij-idea·vr·javafx