设计模式:策略模式举例 2025-10-02

设计模式:策略模式举例

#include <iostream>
#include <memory>

// 抽象策略接口:支付策略
class PaymentStrategy {
public:
    virtual ~PaymentStrategy() = default;  // 虚析构函数确保正确释放派生类资源
    virtual void processPayment(double amount) = 0;  // 纯虚函数,定义支付接口
};

// 具体策略:信用卡支付
class CreditCardPayment : public PaymentStrategy {
public:
    void processPayment(double amount) override {
        std::cout << "Processing payment with credit card: " << amount << std::endl;
        // 实际的信用卡支付逻辑,如调用第三方支付接口
    }
};

// 具体策略:支付宝支付
class AlipayPayment : public PaymentStrategy {
public:
    void processPayment(double amount) override {
        std::cout << "Processing payment with Alipay: " << amount << std::endl;
        // 实际的支付宝支付逻辑,如调用支付宝SDK
    }
};

// 具体策略:微信支付
class WeChatPayment : public PaymentStrategy {
public:
    void processPayment(double amount) override {
        std::cout << "Processing payment with WeChat Pay: " << amount << std::endl;
        // 实际的微信支付逻辑,如调用微信支付API
    }
};

// 上下文类:订单服务
class OrderService {
private:
    std::unique_ptr<PaymentStrategy> paymentStrategy;  // 使用智能指针管理策略对象生命周期

public:
    // 通过构造函数注入支付策略(移动语义转移所有权)
    explicit OrderService(std::unique_ptr<PaymentStrategy> strategy) 
        : paymentStrategy(std::move(strategy)) {}

    void processOrder(double amount) {
        // 其他订单处理逻辑,如生成订单号、记录订单信息等
        std::cout << "Processing order..." << std::endl;
        
        // 调用支付策略进行支付
        paymentStrategy->processPayment(amount);
        
        // 后续订单处理逻辑,如更新库存、发送通知等
        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;
}

策略模式可以说很好的遵循了面向对象的SOLID原则

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容