設(shè)計(jì)模式:策略模式舉例 2025-10-02

設(shè)計(jì)模式:策略模式舉例

#include <iostream>
#include <memory>

// 抽象策略接口:支付策略
class PaymentStrategy {
public:
    virtual ~PaymentStrategy() = default;  // 虛析構(gòu)函數(shù)確保正確釋放派生類資源
    virtual void processPayment(double amount) = 0;  // 純虛函數(shù),定義支付接口
};

// 具體策略:信用卡支付
class CreditCardPayment : public PaymentStrategy {
public:
    void processPayment(double amount) override {
        std::cout << "Processing payment with credit card: " << amount << std::endl;
        // 實(shí)際的信用卡支付邏輯,如調(diào)用第三方支付接口
    }
};

// 具體策略:支付寶支付
class AlipayPayment : public PaymentStrategy {
public:
    void processPayment(double amount) override {
        std::cout << "Processing payment with Alipay: " << amount << std::endl;
        // 實(shí)際的支付寶支付邏輯,如調(diào)用支付寶SDK
    }
};

// 具體策略:微信支付
class WeChatPayment : public PaymentStrategy {
public:
    void processPayment(double amount) override {
        std::cout << "Processing payment with WeChat Pay: " << amount << std::endl;
        // 實(shí)際的微信支付邏輯,如調(diào)用微信支付API
    }
};

// 上下文類:訂單服務(wù)
class OrderService {
private:
    std::unique_ptr<PaymentStrategy> paymentStrategy;  // 使用智能指針管理策略對(duì)象生命周期

public:
    // 通過構(gòu)造函數(shù)注入支付策略(移動(dòng)語(yǔ)義轉(zhuǎn)移所有權(quán))
    explicit OrderService(std::unique_ptr<PaymentStrategy> strategy) 
        : paymentStrategy(std::move(strategy)) {}

    void processOrder(double amount) {
        // 其他訂單處理邏輯,如生成訂單號(hào)、記錄訂單信息等
        std::cout << "Processing order..." << std::endl;
        
        // 調(diào)用支付策略進(jìn)行支付
        paymentStrategy->processPayment(amount);
        
        // 后續(xù)訂單處理邏輯,如更新庫(kù)存、發(fā)送通知等
        std::cout << "Order processed successfully." << std::endl;
    }
};

int main() {
    // 使用信用卡支付
    auto creditCardPayment = std::make_unique<CreditCardPayment>();
    OrderService orderService1(std::move(creditCardPayment));
    orderService1.processOrder(100.0);

    // 使用支付寶支付
    auto alipayPayment = std::make_unique<AlipayPayment>();
    OrderService orderService2(std::move(alipayPayment));
    orderService2.processOrder(200.0);

    // 使用微信支付
    auto weChatPayment = std::make_unique<WeChatPayment>();
    OrderService orderService3(std::move(weChatPayment));
    orderService3.processOrder(300.0);

    return 0;
}

策略模式可以說很好的遵循了面向?qū)ο蟮腟OLID原則

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容