策略模式通过抽象基类定义接口,具体策略类继承实现,上下文类动态持有策略对象,实现算法与客户端解耦。

策略模式是一种行为设计模式,它让你定义一系列算法或策略,并将每种算法分别放入独立的类中,使算法的变化独立于使用它的客户端。在C++中实现策略模式,核心是通过抽象基类定义接口,然后让具体策略类继承并实现该接口,再由上下文类持有策略对象的指针或引用,从而在运行时动态切换策略。
定义策略接口
首先创建一个抽象基类,声明策略的公共接口。通常是一个虚函数,用于执行具体的算法逻辑。
class Strategy {
public:
virtual ~Strategy() = default;
virtual void execute() const = 0;
};
实现具体策略类
每个具体策略继承自Strategy,并实现自己的execute方法。比如:
class ConcreteStrategyA : public Strategy {
public:
void execute() const override {
std::cout << "执行策略 A\n";
}
};
class ConcreteStrategyB : public Strategy {
public:
void execute() const override {
std::cout << "执行策略 B\n";
}
};
上下文类使用策略
上下文类持有一个指向Strategy的指针或引用,可以在构造时传入,也可以在运行时更换。
Northstar盈富量化交易软件是一个基于B/S架构的一站式量化交易平台,能进行历史回放、策略研发、模拟交易、实盘交易。 已对接国内期货CTP交易系统,并陆续补充国内股票XTP渠道、老虎证券、币安等多种渠道。这是一个面向程序员的开源高频量化交易软件,用于期货、股票、外汇、炒币等多种交易场景,实现自动交易。暂时只对接了国内期货交易所,理论上可以对接任意交易所。 功能特性:1、一站式平台,可适配对接
立即学习“C++免费学习笔记(深入)”;
class Context {
private:
std::unique_ptr strategy_;
public:
explicit Context(std::unique_ptr strategy)
: strategy_(std::move(strategy)) {}
void setStrategy(std::unique_ptr strategy) {
strategy_ = std::move(strategy);
}
void run() const {
if (strategy_) {
strategy_->execute();
}
}
};
使用示例
在主函数中,可以灵活地切换不同策略:
int main() {
Context context{std::make_unique()};
context.run(); // 输出:执行策略 A
context.setStrategy(std::make_unique());
context.run(); // 输出:执行策略 B
return 0;
}
关键点总结:
- 策略接口统一调用方式,解耦算法与使用者
- 使用智能指针管理策略生命周期,避免内存泄漏
- 支持运行时动态更换策略,提升灵活性
- 适用于多种算法可互换的场景,如排序、压缩、支付方式等










