惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

AI
AI
小众软件
小众软件
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
Apple Machine Learning Research
Apple Machine Learning Research
F
Fortinet All Blogs
罗磊的独立博客
爱范儿
爱范儿
GbyAI
GbyAI
Stack Overflow Blog
Stack Overflow Blog
MongoDB | Blog
MongoDB | Blog
D
Docker
C
CXSECURITY Database RSS Feed - CXSecurity.com
Spread Privacy
Spread Privacy
Recent Announcements
Recent Announcements
酷 壳 – CoolShell
酷 壳 – CoolShell
G
GRAHAM CLULEY
A
About on SuperTechFans
C
Cisco Blogs
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
B
Blog
Project Zero
Project Zero
V
V2EX
K
Kaspersky official blog
P
Privacy International News Feed
博客园 - 叶小钗
I
Intezer
T
Threatpost
The GitHub Blog
The GitHub Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
Cybersecurity and Infrastructure Security Agency CISA
Cyberwarzone
Cyberwarzone
Microsoft Azure Blog
Microsoft Azure Blog
N
Netflix TechBlog - Medium
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 【当耐特】
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
S
Schneier on Security
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
F
Full Disclosure
The Cloudflare Blog
P
Palo Alto Networks Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tenable Blog

博客园 - 黄明基

解剖一个桌面级 AI Copilot 的架构:Stargazer AI Copilot(.NET 10 + Avalonia)是怎么“分层”的 StargazerLab Copilot使用说明 🚀 用 .NET + Avalonia 打造你的专属 AI Copilot 桌面端 分布式应用框架Microsoft Orleans - 7、基于 Microsoft Orleans 构建模块化微服务:用户、消息与存储三大核心模块解析 Semantic Kernel人工智能开发 - 第六章:Semantic Kernel的安全与过滤器机制——构建可信赖的AI应用防护体系 Semantic Kernel人工智能开发 - 第五章:提示词工程与模板优化——释放大语言模型真正潜力 Semantic Kernel人工智能开发 - 第四章:Semantic Kernel内存管理系统——为AI注入持久记忆与上下文感知能力 Semantic Kernel人工智能开发 - 第三章:Semantic Kernel插件系统详解——扩展AI能力的核心引擎 Semantic Kernel人工智能开发 - 第二章:环境搭建与第一个AI应用——从零开始构建智能对话系统 Semantic Kernel人工智能开发 - 第一章:Semantic Kernel框架概览——开启智能应用开发之门 结合.NET Aspire与Spring Boot:构建可观测的云原生Java应用 分布式应用框架Microsoft Orleans - 6、构建高可用Orleans应用:集群配置与容灾机制详解 分布式应用框架Microsoft Orleans - 5、掌握Orleans高级特性:计时器、提醒与流处理详解 分布式应用框架Microsoft Orleans - 4、掌握Microsoft Orleans状态管理:从持久化配置到事务处理 分布式应用框架Microsoft Orleans - 3、深入解析Orleans核心要素:Grain与Silo的工作原理 分布式应用框架Microsoft Orleans - 2、动手实践:构建你的第一个Microsoft Orleans应用程序 分布式应用框架Microsoft Orleans - 1、Microsoft Orleans简介 AI真的太好用啦!Aspire Dashboard集成GitHub Copilot。 智能助手客户端 设计模式学习:状态模式实现订单状态流转 跨平台桌面应用开发:解锁 Electron 与 shadcn/ui 的潜力 构建你的.NET Aspire解决方案
设计模式学习:在支付系统中的实战应用
黄明基 · 2025-03-05 · via 博客园 - 黄明基

一、策略模式:灵活切换支付方式

场景需求

系统需要支持支付宝、微信支付、银联等多种支付渠道,且可能随时新增支付方式。

模式实现

  1. 定义支付策略接口
public interface IPaymentStrategy 
{
    void ProcessPayment(decimal amount, string currency);
}
  1. 实现具体支付策略类
// 支付宝策略
public class AlipayStrategy : IPaymentStrategy
{
    public void ProcessPayment(decimal amount, string currency)
    {
        Console.WriteLine($"支付宝支付:{amount}{currency}");
        // 调用支付宝SDK实现
    }
}

// 微信支付策略(实现类似)
public class WechatPayStrategy : IPaymentStrategy { /*...*/ }
  1. 创建支付上下文类
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);

五、综合应用示例

  1. 定义支付策略接口
public interface IPaymentStrategy 
{
    void ProcessPayment(decimal amount, string currency);
}
  1. 实现具体支付策略类
// 支付宝策略
public class AlipayStrategy : IPaymentStrategy
{
    public void ProcessPayment(decimal amount, string currency)
    {
        Console.WriteLine($"支付宝支付:{amount}{currency}");
        // 调用支付宝SDK实现
    }
}

// 微信支付策略(实现类似)
public class WechatPayStrategy : IPaymentStrategy { /*...*/ }

// 银联支付策略(实现类似)
public class UnionPayStrategy : IPaymentStrategy { /*...*/ }
  1. 创建支付请求类
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("不支持的支付方式");
        }
    }
}
  1. 创建支付装饰类
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);
    }
}
  1. 创建支付上下文类
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);
    }
}
  1. 创建支付处理链类
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