设计模式:策略模式举例
#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原则