8.9.4 策略模式
策略模式主要是为了取代if…else的使用,具体的业务场景:在很多电商网站或者有支付场景的系统中,支持多种支付方式,比如使用银行卡,微信或者支付宝等;
#include <iostream>
// Strategy interface
class Strategy {
public:
virtual void execute() const = 0;
virtual ~Strategy() {}
};
// 策略 A
class ConcreteStrategyA : public Strategy {
public:
void execute() const override {
std::cout << "Executing Strategy A" << std::endl;
}
};
// 策略 B
class ConcreteStrategyB : public Strategy {
public:
void execute() const override {
std::cout << "Executing Strategy B" << std::endl;
}
};
// Context class
class Context {
private:
Strategy* strategy;
public:
Context(Strategy* strategy) : strategy(strategy) {}
void setStrategy(Strategy* newStrategy) {
strategy = newStrategy;
}
void executeStrategy() const {
strategy->execute();
}
};
int main() {
// Create strategies
ConcreteStrategyA strategyA;
ConcreteStrategyB strategyB;
// Create context with default strategy A
Context context(&strategyA);
context.executeStrategy();
// Change strategy to B
context.setStrategy(&strategyB);
context.executeStrategy();
return 0;
}