C++策略模式中的上下文类应该如何定义,请举例说明
时间: 2024-10-22 17:30:21 浏览: 15
在C++的策略模式中,上下文类(Context Class)是一个非常重要的组成部分。它负责管理策略类(Strategy Class)和相关的数据,并且负责调用策略类的方法。上下文类通常是一个包含多个策略类的容器,每个策略类对应一个特定的行为。
以下是一个简单的示例,说明如何在C++中定义上下文类:
```cpp
#include <vector>
#include <string>
// 策略类,定义不同的行为
class Strategy {
public:
virtual void execute() = 0; // 纯虚函数
};
class StrategyA : public Strategy {
public:
void execute() override {
std::cout << "执行策略A" << std::endl;
}
};
class StrategyB : public Strategy {
public:
void execute() override {
std::cout << "执行策略B" << std::endl;
}
};
// 上下文类,包含多个策略类和相关的数据
class Context {
public:
Context(std::vector<Strategy*> strategies) : strategies(strategies) {}
void executeStrategy() {
for (auto strategy : strategies) {
if (strategy != nullptr) {
strategy->execute(); // 执行当前的策略方法
}
}
}
private:
std::vector<Strategy*> strategies; // 策略类的指针向量
};
```
使用这个上下文类的例子如下:
```cpp
int main() {
// 创建两个策略对象实例并添加到上下文类中
Strategy* strategyA = new StrategyA();
Strategy* strategyB = new StrategyB();
Context context(std::vector<Strategy*>({strategyA, strategyB}));
// 执行策略方法,会按照顺序依次执行两个策略对象的方法,直到最后一个策略对象为空时停止执行。
context.executeStrategy(); // 输出:执行策略A,执行策略B,因为最后一个策略对象为空,所以停止执行。
return 0;
}
```
这个例子展示了如何使用C++的策略模式来定义上下文类。上下文类负责管理多个策略对象,并在需要时调用它们的方法。通过这种方式,你可以根据需要动态地改变行为,而无需修改代码的其他部分。
阅读全文