策略+适配器模式详解

文章目录

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

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

相关推荐
cypking36 分钟前
Objective-C 语法完整学习手册(小白自学 + 开发备查)
c语言·开发语言·学习·objective-c
ambition202422 小时前
操作系统同步:读者-写者问题与读写公平法详解(附每个 PV 操作含义)
linux·开发语言·数据结构·unix
chuan.bai5 小时前
Java RAG 实战(第 11 篇):RAG 知识工作台网页
java·开发语言·人工智能
离陌在学C#7 小时前
C# 事件(Event)详解:从概念到实战
开发语言·c#
0x538 小时前
网站通信(一)
java
Terra.K8 小时前
Java异常学习[特殊字符]
java·开发语言·学习
葡萄城技术团队9 小时前
InfluxDB 2\.x 深度解析:核心架构、Flux 函数与制造业落地指南(三)
java·开发语言·架构
Super 含9 小时前
Android 启动优化(五):线程、GC 与 IO 为什么会拖慢启动?
java·服务器·数据库
counting money9 小时前
Java IO流详解:从InputStream到文件操作实战
java·开发语言·python
wuyk55510 小时前
98.C语言易混难点:字符数组与字符串指针的底层差异
c语言·开发语言·c++·stm32·嵌入式硬件·算法