【读书活动感悟分享】—模式冲锋号—《设计模式:可复用面向对象软件的基础》策略与模板方法在支付中心中的应用_话题

【读书活动感悟分享】—模式冲锋号—《设计模式:可复用面向对象软件的基础》策略与模板方法在支付中心中的应用

2025-11-14 23:12:30
0
123

一、核心思想与模式定位
1.1 策略模式
将算法封装为独立对象,使它们可以相互替换。这样通过组合而非继承实现行为变化开遵循开闭原则。
1.2 模板方法模式
定义算法骨架,将可变步骤延迟到子类实现。这样通过继承控制算法结构,体现"好莱坞原则"。

1.3 结构对比

维度策略模式模版方法
意图算法互换算法骨架定义
关系对象组合类继承
变化点完整算法算法步骤
控制权客户端父类


二、设计模式在支付中心中的应用

2.1 模版方法

1. 结构体现

• AbsTradeHandler 作为抽象基类,定义了支付、退款、订单状态同步等核心业务流程的主线(即算法骨架),如 Charge、Refund、SyncBillState 等方法。

• 这些方法内部会调用一系列虚方法或抽象方法(如 VerifyChargeParams、BuildChargeCert、RequestRefund、BuildRefundResult 等),这些步骤的具体实现由子类负责。


2. 典型流程(以 Charge 为例)


public ChargeCredential Charge(ChargeParams chargeParams)
{
    // 1. 参数校验(可被子类重写)
    this.VerifyChargeParams(chargeParams);

    // 2. 构建收款订单(基类实现)
    ChargeBillEntity chargeBill = this.BuildChargeBill(chargeParams);

    // 3. 构建收款凭据(可被子类重写/实现)
    ChargeCredential chCre = this.BuildChargeCert(chargeBill, chargeParams);

    // 4. 更新订单(基类实现)
    this.UpdateChargeBill(chargeBill);

    // 5. 发送异步查询任务(可被子类重写)
    this.SendChargeQueryTask(chargeBill, chargeParams);

    return chCre;
}

其中主流程不可变,但每个关键步骤都可由子类定制,体现了模版方法模式的精髓。


2.2 策略模式

1. 结构体现

• AbsTradeHandler 只是支付处理的抽象,每种支付渠道(如微信、支付宝、翼支付等)都实现了自己的 Handler(如 AsaasCardPayHandler、BestpayPayHandler 等),这些子类实现了基类的抽象方法,封装了各自的业务策略。

• 业务代码通过 ITradeHandler 接口操作,具体用哪种 Handler 由工厂(如 TradeHandlerFactory)根据
动态决定。


2. 典型用法

ITradeHandler handler = TradeHandlerFactory.GetTradeHandler(appId, payChannel);
handler.Charge(chargeParams);
handler.Refund(refundParams);

handler 的实际类型在运行时由工厂决定,不同渠道的 Handler 封装了不同的支付策略,但对外暴露统一接口,业务层无需关心具体实现。


三、总结

AbsTradeHandler 及其子类体系是模版方法模式和策略模式协同应用的典范。

通过工厂+抽象基类+多实现的组合,既保证了流程统一,又实现了策略灵活切换。在设计中使用策略模式则让每种支付渠道的实现细节灵活可变,便于新增、切换和维护不同支付方式。利用模版方法模式保证了所有支付流程的主线一致,便于维护和扩展。




评论


意见反馈