200行策略模式代码c++
时间: 2023-10-18 18:13:39 浏览: 31
策略模式是一种行为模式,它定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
下面是一个简单的 C++ 实现:
```
#include <iostream>
#include <string>
using namespace std;
class Strategy
{
public:
virtual void execute(const string& str) = 0;
};
class ConcreteStrategy1 : public Strategy
{
public:
void execute(const string& str) override
{
cout << "Concrete Strategy 1: " << str << endl;
}
};
class ConcreteStrategy2 : public Strategy
{
public:
void execute(const string& str) override
{
cout << "Concrete Strategy 2: " << str << endl;
}
};
class Context
{
public:
Context(Strategy* strategy) : m_strategy(strategy) {}
void setStrategy(Strategy* strategy)
{
m_strategy = strategy;
}
void executeStrategy(const string& str)
{
m_strategy->execute(str);
}
private:
Strategy* m_strategy;
};
int main()
{
ConcreteStrategy1 strategy1;
ConcreteStrategy2 strategy2;
Context context(&strategy1);
context.executeStrategy("Hello World!");
context.setStrategy(&strategy2);
context.executeStrategy("Hello World!");
return 0;
}
```
在上面的示例中,我们定义了一个 `Strategy` 接口,其中包含一个 `execute()` 方法,该方法接受一个字符串参数并执行具体的算法。我们还定义了两个具体的策略类 `ConcreteStrategy1` 和 `ConcreteStrategy2`,它们都实现了 `execute()` 方法。
接下来,我们定义了一个 `Context` 类,它包含一个指向 `Strategy` 的指针。 `Context` 类提供了一个 `setStrategy()` 方法,用于在运行时更改策略。它还提供了一个 `executeStrategy()` 方法,该方法接受一个字符串参数并将其传递给策略对象的 `execute()` 方法。
在 `main()` 函数中,我们创建了 `ConcreteStrategy1` 和 `ConcreteStrategy2` 的实例,并将 `ConcreteStrategy1` 实例传递给 `Context` 对象的构造函数。我们随后调用 `executeStrategy()` 方法,并将 "Hello World!" 传递给它,这将调用 `ConcreteStrategy1` 的 `execute()` 方法。接下来,我们使用 `setStrategy()` 方法将 `ConcreteStrategy2` 实例设置为策略,并再次调用 `executeStrategy()` 方法,这次将调用 `ConcreteStrategy2` 的 `execute()` 方法。