C++如何使用策略模式实现动态算法切换

定义抽象基类Strategy声明execute接口;2. 创建QuickSortStrategy等具体类实现算法;3. 运行时通过指针调用不同策略的execute方法实现动态切换。

C++如何使用策略模式实现动态算法切换

在C++中使用策略模式实现动态算法切换,核心是将不同的算法封装成独立的类,并通过统一接口在运行时替换。这样可以在不修改调用代码的前提下,灵活更换算法逻辑。

定义统一的策略接口

创建一个抽象基类,声明算法的执行接口。所有具体算法都继承该基类并实现对应方法。

 class Strategy { public:     virtual ~Strategy() = default;     virtual void execute() const = 0; }; 

实现多个具体策略

每个算法单独实现,便于维护和扩展。例如实现排序、加密或路径规划等不同策略。

 class QuickSortStrategy : public Strategy { public:     void execute() const override {         std::cout << "执行快速排序n";     } }; <p>class MergeSortStrategy : public Strategy { public: void execute() const override { std::cout << "执行归并排序n"; } };</p><p>class BubbleSortStrategy : public Strategy { public: void execute() const override { std::cout << "执行冒泡排序n"; } };</p>

上下文类管理策略切换

Context类持有策略指针,允许在运行时更改当前使用的算法。客户端无需知道具体类型。

立即学习C++免费学习笔记(深入)”;

C++如何使用策略模式实现动态算法切换

造梦阁AI

ai小说推文一键成片,你的故事值得被看见

C++如何使用策略模式实现动态算法切换139

查看详情 C++如何使用策略模式实现动态算法切换

 class Context { private:     const Strategy* strategy_; <p>public: explicit Context(const Strategy* strategy) : strategy_(strategy) {}</p><pre class='brush:php;toolbar:false;'>void setStrategy(const Strategy* strategy) {     strategy_ = strategy; }  void run() const {     strategy_->execute(); }

};

运行时动态切换示例

在main函数中根据条件或用户输入更换策略,体现灵活性。

 int main() {     QuickSortStrategy quickSort;     MergeSortStrategy mergeSort;     BubbleSortStrategy bubbleSort; <pre class='brush:php;toolbar:false;'>Context context(&quickSort); context.run();  // 输出:执行快速排序  context.setStrategy(&mergeSort); context.run();  // 输出:执行归并排序  context.setStrategy(&bubbleSort); context.run();  // 输出:执行冒泡排序  return 0;

}

这种设计让算法独立于使用它的客户端,新增策略只需添加新类,符合开闭原则。基本上就这些。

相关标签:

c++ 封装 指针 继承 接口 算法

上一篇
下一篇