用C++写一段优秀的策略模式代码
时间: 2024-04-16 08:28:18 浏览: 115
C++ 写的策略模式 2
当然,下面是一个示例代码,演示了如何在C++中实现策略模式:
```cpp
#include <iostream>
// 抽象策略基类
class Strategy {
public:
virtual void execute() = 0;
};
// 具体策略类1
class ConcreteStrategy1 : public Strategy {
public:
void execute() override {
std::cout << "Executing Strategy 1" << std::endl;
}
};
// 具体策略类2
class ConcreteStrategy2 : public Strategy {
public:
void execute() override {
std::cout << "Executing Strategy 2" << std::endl;
}
};
// 客户端类
class Client {
private:
Strategy* strategy; // 持有策略基类的指针
public:
void setStrategy(Strategy* newStrategy) {
strategy = newStrategy;
}
void executeStrategy() {
strategy->execute(); // 调用策略的执行函数
}
};
int main() {
Client client;
ConcreteStrategy1 strategy1;
ConcreteStrategy2 strategy2;
client.setStrategy(&strategy1);
client.executeStrategy(); // 调用策略1的算法逻辑
client.setStrategy(&strategy2);
client.executeStrategy(); // 调用策略2的算法逻辑
return 0;
}
```
在上面的代码中,我们定义了一个抽象的策略基类 `Strategy`,其中声明了一个纯虚函数 `execute()`。然后,我们派生出两个具体的策略类 `ConcreteStrategy1` 和 `ConcreteStrategy2`,它们分别实现了自己的策略算法。
在客户端类 `Client` 中,我们使用一个 `Strategy` 类型的指针来持有具体的策略对象。通过 `setStrategy()` 函数可以动态地设置不同的策略。而 `executeStrategy()` 函数会根据当前设置的策略来执行相应的算法逻辑。
最后,在 `main()` 函数中,我们创建了一个 `Client` 对象,并分别设置和执行了两种不同的策略。
这段代码展示了策略模式的基本使用方式,通过动态切换具体的策略对象,实现了算法的灵活变换。你可以根据自己的需求进行修改和扩展。
阅读全文