定义策略接口
/** * 支付策略接口 * <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 { public String pay(String payMethod) { return "支付宝支付"; } public PayMethodEnum getPayMethod() { return PayMethodEnum.ALIPAY; } }
定义枚举类
/** * Payment Method Enumeration * @author Administrator */ 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", "谷歌支付"); 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 */ 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")); } }