通过枚举实现支付策略模式

简介: 定义支付策略接口及枚举,通过策略模式实现多种支付方式。上下文类管理策略映射,支持动态获取与扩展,提升系统灵活性和可维护性。(239字符)

定义策略接口

/**
 * 支付策略接口
 * <p>定义了支付策略的通用接口,不同的支付方式需要实现该接口</p>
 *
 * @author Administrator
 * @version V1.0
 * @since 2025-09-23 15:39
 */
public interface PayStrategy {

    /**
     * 执行支付操作
     *
     * @param payMethod 支付方式
     * @return 支付结果
     */
    String pay(String payMethod);

    /**
     * 获取支付方式枚举
     *
     * @return PayMethodEnum 支付方式枚举
     * @see PayMethodEnum
     */
    PayMethodEnum getPayMethod();
}

实现类

/**
 * TODO
 *
 * @author Administrator
 * @version V1.0
 * @since 2025-09-23 15:39
 */
public class AliPayServiceImpl implements PayStrategy {
    @Override
    public String pay(String payMethod) {
        return "支付宝支付";
    }

    @Override
    public PayMethodEnum getPayMethod() {
        return PayMethodEnum.ALIPAY;
    }
}

定义枚举类

/**
 * Payment Method Enumeration
 * @author Administrator
 */
@Getter
public enum PayMethodEnum {
    ALIPAY("Alipay", "支付宝"),
    WECHAT_PAY("WeChat Pay", "微信支付"),
    UNION_PAY("Union Pay", "银联支付"),
    CREDIT_CARD("Credit Card", "信用卡"),
    DEBIT_CARD("Debit Card", "借记卡"),
    PAYPAL("PayPal", "贝宝"),
    APPLE_PAY("Apple Pay", "苹果支付"),
    GOOGLE_PAY("Google Pay", "谷歌支付");

    @JsonValue
    private final String type;
    private final String name;

    PayMethodEnum(String type, String name) {
        this.type = type;
        this.name = name;
    }
}

定义支付上下文

/**
 * 支付上下文类
 * <p>该类负责管理不同的支付策略,根据支付方式枚举获取对应的支付策略实现</p>
 * <p>使用策略模式实现,支持扩展新的支付方式</p>
 *
 * @author Administrator
 * @version V1.0
 * @since 2025-09-23 15:36
 */
@Component
public class PayContext {
    /**
     * 支付策略映射表
     * <p>使用EnumMap提高性能,Key为支付方式枚举,Value为对应的支付策略实现</p>
     */
    private final Map<PayMethodEnum, PayStrategy> payStrategyMap;

    /**
     * 构造函数
     * <p>初始化支付策略映射表,将所有支付策略实现注册到映射表中</p>
     *
     * @param payStrategyList 支付策略实现列表
     */
    public PayContext(List<PayStrategy> payStrategyList) {
        this.payStrategyMap = new EnumMap<>(PayMethodEnum.class);
        payStrategyList.forEach(payStrategy -> payStrategyMap.put(payStrategy.getPayMethod(), payStrategy));
    }

    /**
     * 根据支付方式获取对应的支付策略
     * <p>通过支付方式枚举从映射表中查找对应的支付策略实现</p>
     *
     * @param payMethod 支付方式枚举
     * @return 对应的支付策略实现
     * @throws IllegalArgumentException 当找不到对应支付策略时抛出异常
     */
    public PayStrategy getPayStrategy(PayMethodEnum payMethod) {
        PayStrategy payStrategy = payStrategyMap.get(payMethod);
        if (payStrategy == null) {
            throw new IllegalArgumentException(String.format("No strategy found for type: %s", payMethod));
        }
        return payStrategy;
    }

    /**
     * 示例演示方法
     * <p>演示如何使用PayContext获取并执行支付策略</p>
     *
     * @param args 命令行参数
     */
    public static void main(String[] args) {
        PayContext payContext = new PayContext(List.of(new AliPayServiceImpl(), new WechatPayServiceImpl()));
        System.out.println(payContext.getPayStrategy(PayMethodEnum.ALIPAY).pay("ALIPAY"));
    }
}


相关文章
|
6月前
|
存储 大数据 Unix
Python生成器 vs 迭代器:从内存到代码的深度解析
在Python中,处理大数据或无限序列时,迭代器与生成器可避免内存溢出。迭代器通过`__iter__`和`__next__`手动实现,控制灵活;生成器用`yield`自动实现,代码简洁、内存高效。生成器适合大文件读取、惰性计算等场景,是性能优化的关键工具。
348 2
|
6月前
|
数据采集 机器学习/深度学习 人工智能
YOLOv11浅浅解析:架构创新
YOLOv11是YOLO系列最新升级版,通过C3k2模块、SPPF优化和解耦检测头等创新,显著提升检测精度与速度,mAP提高2-5%,推理更快,支持多平台部署,适用于工业、安防、自动驾驶等场景。
|
6月前
|
SQL 前端开发 关系型数据库
如何开发一套研发项目管理系统?(附架构图+流程图+代码参考)
研发项目管理系统助力企业实现需求、缺陷与变更的全流程管理,支持看板可视化、数据化决策与成本优化。系统以MVP模式快速上线,核心功能包括需求看板、缺陷闭环、自动日报及关键指标分析,助力中小企业提升交付效率与协作质量。
|
6月前
|
存储 人工智能 Serverless
函数计算进化之路:AI 应用运行时的状态剖析
AI应用正从“请求-响应”迈向“对话式智能体”,推动Serverless架构向“会话原生”演进。阿里云函数计算引领云上 AI 应用 Serverless 运行时技术创新,实现性能、隔离与成本平衡,开启Serverless AI新范式。
690 12
|
安全 Go 索引
Go切片循环就用range 有这一篇就够了
Go切片循环就用range 有这一篇就够了
962 0
|
6月前
|
SQL 分布式计算 关系型数据库
Dataphin x Paimon 开箱即用的数据湖治理解决方案
Dataphin深度集成Apache Paimon,通过全链路功能适配和性能优化,为企业提供开箱即用的数据湖治理解决方案。
399 2
|
6月前
|
人工智能 Cloud Native 安全
超前探展!2025 云栖大会朋友圈晒图必备
2025 云栖大会设置人工智能+、计算、前沿应用三大主题馆,围绕云计算与 AI,全景式呈现展示 AI 时代云计算最新技术形态与产品进展。在计算馆,阿里云将集中展示从芯片到平台的全栈技术能力。观众可以了解到阿里云在超大规模集群、分布式训练、异构资源管理、推理加速等方面的软件能力,也能首次接触到面向推理和智能体需求的新一代硬件。如果你也一样,关注 AI 原生应用的创新和落地~请直奔计算馆 -「云原生 AI 应用开发」特展 !
|
6月前
|
数据采集 运维 监控
不重启、不重写、不停机:SLS 软删除如何实现真正的“无感数据急救”?
SLS 全新推出的「软删除」功能,以接近索引查询的性能,解决了数据应急删除与脏数据治理的痛点。2 分钟掌握这一数据管理神器。
750 46
|
6月前
|
消息中间件 人工智能 开发框架
火速收藏!2025 云栖大会 AI 中间件议程看点全公开(附免费报名通道)
2025 云栖大会“云智一体 · 碳硅共生”的主题下,9月26日,云栖小镇D1-3馆「AI 中间件论坛」将聚焦 AI 时代中间件的技术演进与创新实践,带来 AI 开发框架、消息队列、事件驱动架构及 API 网关等关键技术在 AI 领域的前沿技术探索、最新产品发布、落地实践经验。
446 45
|
6月前
|
SQL 存储 分布式计算
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场
本文旨在帮助非专业数据研发但是有高频ODPS使用需求的同学们(如数分、算法、产品等)能够快速上手ODPS查询优化,实现高性能查数看数,避免日常工作中因SQL任务卡壳、失败等情况造成的工作产出delay甚至集群资源稳定性问题。
1364 36
【万字长文,建议收藏】《高性能ODPS SQL章法》——用古人智慧驾驭大数据战场