設(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原則