一、策略模式:灵活切换支付方式
场景需求
系统需要支持支付宝、微信支付、银联等多种支付渠道,且可能随时新增支付方式。
模式实现
- public interface IPaymentStrategy
- {
- void ProcessPayment(decimal amount, string currency);
- }
复制代码- // 支付宝策略
- public class AlipayStrategy : IPaymentStrategy
- {
- public void ProcessPayment(decimal amount, string currency)
- {
- Console.WriteLine($"支付宝支付:{amount}{currency}");
- // 调用支付宝SDK实现
- }
- }
- // 微信支付策略(实现类似)
- public class WechatPayStrategy : IPaymentStrategy { /*...*/ }
复制代码- public class PaymentContext
- {
- private IPaymentStrategy _strategy;
- public void SetStrategy(IPaymentStrategy strategy) => _strategy = strategy;
-
- public void ExecutePayment(decimal amount, string currency)
- {
- _strategy.ProcessPayment(amount, currency);
- }
- }
复制代码 二、装饰器模式:动态扩展支付功能
场景需求
为支付流程添加日志记录、风控验证等附加功能。
模式实现
- public abstract class PaymentDecorator : IPaymentStrategy
- {
- protected IPaymentStrategy _strategy;
- public PaymentDecorator(IPaymentStrategy strategy)
- {
- _strategy = strategy;
- }
- public virtual void ProcessPayment(decimal amount, string currency)
- {
- _strategy.ProcessPayment(amount, currency);
- }
- }
- // 日志装饰器
- public class LoggingDecorator : PaymentDecorator
- {
- public LoggingDecorator(IPaymentStrategy strategy) : base(strategy) {}
- public override void ProcessPayment(decimal amount, string currency)
- {
- Console.WriteLine($"[LOG] 支付请求:{amount}{currency}");
- base.ProcessPayment(amount, currency);
- }
- }
- public class RiskCheckDecorator : PaymentDecorator
- {
- public RiskCheckDecorator(IPaymentStrategy strategy) : base(strategy) {}
- public override void ProcessPayment(decimal amount, string currency)
- {
- Console.WriteLine("[RISK] 风控验证中...");
- base.ProcessPayment(amount, currency);
- }
- }
- // 使用示例
- var payment = new LoggingDecorator(new RiskCheckDecorator(new AlipayStrategy()));
- payment.ProcessPayment(100, "CNY");
复制代码 三、工厂模式:统一支付对象创建
场景需求
根据配置参数动态创建支付策略实例。
模式实现
- public class PaymentFactory
- {
- public static IPaymentStrategy Create(string paymentType)
- {
- switch (paymentType.ToLower())
- {
- case "alipay":
- return new AlipayStrategy();
- case "wechat":
- return new WechatPayStrategy();
- case "unionpay":
- return new UnionPayStrategy();
- default:
- throw new ArgumentException("不支持的支付方式");
- }
- }
- }
- // 调用示例
- var strategy = PaymentFactory.Create("alipay");
- strategy.ProcessPayment(200, "USD");
复制代码 四、责任链模式:支付流程处理
场景需求
处理支付请求时需要依次执行:参数校验 → 风控检查 → 实际支付 → 结果通知。
模式实现
- public abstract class PaymentHandler
- {
- protected PaymentHandler _nextHandler;
-
- public PaymentHandler SetNext(PaymentHandler handler)
- {
- _nextHandler = handler;
- return _nextHandler;
- }
- public abstract void Handle(PaymentRequest request);
- }
- // 参数校验处理器
- public class ValidationHandler : PaymentHandler
- {
- public override void Handle(PaymentRequest request)
- {
- if (string.IsNullOrEmpty(request.OrderId))
- throw new ArgumentException("订单号无效");
-
- _nextHandler?.Handle(request);
- }
- }
- // 构建处理链
- var chain = new ValidationHandler();
- chain.SetNext(new RiskCheckHandler())
- .SetNext(new PaymentProcessorHandler())
- .SetNext(new NotificationHandler());
- chain.Handle(request);
复制代码 五、综合应用示例
- public interface IPaymentStrategy
- {
- void ProcessPayment(decimal amount, string currency);
- }
复制代码- // 支付宝策略
- public class AlipayStrategy : IPaymentStrategy
- {
- public void ProcessPayment(decimal amount, string currency)
- {
- Console.WriteLine($"支付宝支付:{amount}{currency}");
- // 调用支付宝SDK实现
- }
- }
- // 微信支付策略(实现类似)
- public class WechatPayStrategy : IPaymentStrategy { /*...*/ }// 银联支付策略(实现类似)public class UnionPayStrategy : IPaymentStrategy { /*...*/ }
复制代码- public class PaymentFactory
- {
- public static IPaymentStrategy Create(string paymentType)
- {
- switch (paymentType.ToLower())
- {
- case "alipay":
- return new AlipayStrategy();
- case "wechat":
- return new WechatPayStrategy();
- case "unionpay":
- return new UnionPayStrategy();
- default:
- throw new ArgumentException("不支持的支付方式");
- }
- }
- }
复制代码- public abstract class PaymentDecorator : IPaymentStrategy
- {
- protected IPaymentStrategy _strategy;
- public PaymentDecorator(IPaymentStrategy strategy)
- {
- _strategy = strategy;
- }
- public virtual void ProcessPayment(decimal amount, string currency)
- {
- _strategy.ProcessPayment(amount, currency);
- }
- }
- // 日志装饰器
- public class LoggingDecorator : PaymentDecorator
- {
- public LoggingDecorator(IPaymentStrategy strategy) : base(strategy) {}
- public override void ProcessPayment(decimal amount, string currency)
- {
- Console.WriteLine($"[LOG] 支付请求:{amount}{currency}");
- base.ProcessPayment(amount, currency);
- }
- }
复制代码- public class PaymentContext
- {
- private IPaymentStrategy _strategy;
- public void SetStrategy(IPaymentStrategy strategy) => _strategy = strategy;
-
- public void ExecutePayment(decimal amount, string currency)
- {
- new LoggingDecorator(_strategy).ProcessPayment(amount, currency);
- }
- }
复制代码- public abstract class PaymentHandler
- {
- protected PaymentHandler _nextHandler;
-
- public PaymentHandler SetNext(PaymentHandler handler)
- {
- _nextHandler = handler;
- return _nextHandler;
- }
- public abstract void Handle(PaymentRequest request);
- }
- // 参数校验处理器
- public class ValidationHandler : PaymentHandler
- {
- public override void Handle(PaymentRequest request)
- {
- if (string.IsNullOrEmpty(request.OrderId))
- throw new ArgumentException("订单号无效");
-
- _nextHandler?.Handle(request);
- }
- }
- // 风控检查处理器
- public class RiskCheckHandler : PaymentHandler
- {
- public override void Handle(PaymentRequest request)
- {
- Console.WriteLine("[RISK] 风控验证中...");
- _nextHandler?.Handle(request);
- }
- }
- // 支付结果通知处理器
- public class NotificationHandler : PaymentHandler
- {
- public override void Handle(PaymentRequest request)
- {
- Console.WriteLine($"支付结果通知:{request.OrderId}");
- _nextHandler?.Handle(request);
- }
- }
- // 实际支付处理器
- public class PaymentProcessorHandler : PaymentHandler
- {
- public override void Handle(PaymentRequest request)
- {
- Console.WriteLine($"[PAYMENT] 实际支付:{request.Amount}{request.Currency}");
- var strategy = PaymentFactory.Create(request.PaymentType);
- PaymentContext context = new PaymentContext();
- context.SetStrategy(strategy);
- context.ExecutePayment(request.Amount, request.Currency);
- _nextHandler?.Handle(request);
- }
- }
- // 构建处理链
- var chain = new ValidationHandler();
- chain.SetNext(new RiskCheckHandler())
- .SetNext(new PaymentProcessorHandler())
- .SetNext(new NotificationHandler());
- chain.Handle(request);
复制代码 相关代码:https://github.com/huangmingji/design-pattern-learning/tree/main/design-pattern-learning-1
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |