设计模式:策略模式(C++实现)-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
策略模式Strategy Pattern是一种行为设计模式它定义了一系列的算法并将每个算法封装成独立的对象使得它们可以互相替换。下面是一个使用C++实现策略模式的示例
#include <iostream>
// 抽象策略类
class Strategy
{
public:
virtual void execute() = 0;
};
// 具体策略类1
class ConcreteStrategy1 : public Strategy
{
public:
void execute() override
{
std::cout << "Executing Concrete Strategy 1" << std::endl;
}
};
// 具体策略类2
class ConcreteStrategy2 : public Strategy
{
public:
void execute() override
{
std::cout << "Executing Concrete Strategy 2" << std::endl;
}
};
// 上下文类
class Context
{
private:
Strategy *strategy;
public:
Context(Strategy *strategy) : strategy(strategy) {}
void setStrategy(Strategy *strategy)
{
this->strategy = strategy;
}
void executeStrategy()
{
strategy->execute();
}
};
int main()
{
Strategy *strategy1 = new ConcreteStrategy1();
Strategy *strategy2 = new ConcreteStrategy2();
Context context(strategy1);
context.executeStrategy(); // 输出 "Executing Concrete Strategy 1"
context.setStrategy(strategy2);
context.executeStrategy(); // 输出 "Executing Concrete Strategy 2"
delete strategy1;
delete strategy2;
return 0;
}
运行结果
Executing Concrete Strategy 1
Executing Concrete Strategy 2
在上述示例中我们首先定义了一个抽象策略类 Strategy其中包含一个纯虚函数 execute()。然后我们创建了两个具体策略类 ConcreteStrategy1 和 ConcreteStrategy2它们分别实现了 execute() 函数。
接下来我们定义了上下文类 Context其中包含一个私有成员 strategy用于保存当前的策略对象。Context 类中的 setStrategy() 函数用于设置当前策略executeStrategy() 函数用于调用当前策略的 execute() 函数。
在 main() 函数中我们首先创建了两个具体策略对象 strategy1 和 strategy2然后创建了一个 Context 对象 context并将 strategy1 设置为当前策略最后调用 executeStrategy() 函数输出的是 “Executing Concrete Strategy 1”。接着我们将 strategy2 设置为当前策略并再次调用 executeStrategy() 函数输出的是 “Executing Concrete Strategy 2”。
这样我们就实现了一个简单的策略模式。通过将算法封装成具体策略对象并在上下文类中动态设置当前策略我们可以根据需要切换不同的算法实现。这种方式使得算法的变化独立于使用算法的客户端提高了代码的灵活性和可维护性。
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |