请详细介绍设计模式中的策略模式是什么,并且使用C加加语言实现一个策略模式代码
时间: 2023-06-15 12:03:15 浏览: 97
策略模式(Strategy Pattern)是一种行为型设计模式,它定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的客户端。其实就是将一系列的算法封装起来,从而使它们可以相互替换。
使用C++实现策略模式可以按照以下步骤:
1. 定义一个策略接口类,该类定义了所有策略类都必须实现的方法。
```c++
class Strategy {
public:
virtual void execute() = 0;
virtual ~Strategy() {}
};
```
2. 实现多个具体的策略类,这些类实现了策略接口中定义的方法,进行不同的算法处理。
```c++
class ConcreteStrategyA : public Strategy {
public:
void execute() override {
cout << "Executing strategy A" << endl;
}
};
class ConcreteStrategyB : public Strategy {
public:
void execute() override {
cout << "Executing strategy B" << endl;
}
};
class ConcreteStrategyC : public Strategy {
public:
void execute() override {
cout << "Executing strategy C" << endl;
}
};
```
3. 定义一个环境类,该类持有一个策略对象,并且在运行时可以根据需要更改策略对象。
```c++
class Context {
private:
Strategy* strategy_;
public:
Context(Strategy* strategy = nullptr) : strategy_(strategy) {}
void set_strategy(Strategy* strategy) {
strategy_ = strategy;
}
void execute_strategy() {
if (strategy_) {
strategy_->execute();
}
}
~Context() {
delete strategy_;
}
};
```
4. 在客户端中,创建不同的策略对象,并且将它们传递给环境对象,从而触发不同的算法处理。
```c++
int main() {
Strategy* strategyA = new ConcreteStrategyA();
Strategy* strategyB = new ConcreteStrategyB();
Strategy* strategyC = new ConcreteStrategyC();
Context context1(strategyA);
context1.execute_strategy();
context1.set_strategy(strategyB);
context1.execute_strategy();
context1.set_strategy(strategyC);
context1.execute_strategy();
Context context2(strategyB);
context2.execute_strategy();
context2.set_strategy(strategyC);
context2.execute_strategy();
delete strategyA;
delete strategyB;
delete strategyC;
return 0;
}
```
以上代码实现了一个简单的策略模式。在该模式中,我们定义了三个具体的策略类:ConcreteStrategyA,ConcreteStrategyB和ConcreteStrategyC。我们还定义了一个Context类,该类持有一个策略对象,并且在运行时可以更改策略对象。在客户端中,我们创建了不同的策略对象,并且将它们传递给不同的Context对象,从而触发不同的算法处理。
阅读全文