策略模式通过抽象接口将算法封装为独立类,实现运行时动态切换。定义SortStrategy基类声明sort虚函数,BubbleSort、QuickSort、MergeSort等具体类实现各自算法。Sorter上下文类持SortStrategy指针,通过setStrategy更换策略,performSort调用当前策略的排序方法。客户端可灵活切换算法,新增策略无需修改现有代码,符合开闭原则,避免大量条件判断,提升可维护性与扩展性。

在C++中实现策略模式选择算法,核心是将不同算法封装成独立的类,并通过统一接口在运行时动态切换。这种方式避免了使用大量条件判断(如 if/else 或 switch),提高代码的可扩展性和可维护性。
策略模式从一个抽象基类开始,该基类声明算法的公共接口。通常是一个虚函数,供具体策略类重写。
示例:假设我们要实现不同的排序算法作为策略:
class SortStrategy {<br>
public:<br>
&virtual ~SortStrategy() = default;<br>
&virtual void sort(std::vector<int>& data) const = 0;<br>
};<br>每个具体算法继承自策略基类,并实现自己的逻辑。
立即学习“C++免费学习笔记(深入)”;
class BubbleSort : public SortStrategy {<br>
public:<br>
&void sort(std::vector<int>& data) const override {<br>
&// 冒泡排序实现<br>
&}<br>
};<br><br><p>class QuickSort : public SortStrategy {<br>
public:<br>
&void sort(std::vector<int>& data) const override {<br>
&// 快速排序实现<br>
&}<br>
};<br><br></p><p>class MergeSort : public SortStrategy {<br>
public:<br>
&void sort(std::vector<int>& data) const override {<br>
&// 归并排序实现<br>
&}<br>
};<br>Context 类持有策略对象的指针或引用,客户端可在运行时指定使用的算法。
class Sorter {<br>
private:<br>
&const SortStrategy* strategy;<br><br>
public:<br>
&Sorter(const SortStrategy* s) : strategy(s) {}<br><br>
&void setStrategy(const SortStrategy* s) {<br>
&strategy = s;<br>
&}<br><br>
&void performSort(std::vector<int>& data) const {<br>
&if (strategy)<br>
& strategy->sort(data);<br>
&}<br>
};<br>根据需求切换不同算法,无需修改核心逻辑。
int main() {<br>
&std::vector<int> data = {5, 2, 9, 1, 5};<br><br>
&BubbleSort bubble;<br>
&QuickSort quick;<br><br>
&Sorter sorter(&bubble);<br>
&sorter.performSort(data); // 使用冒泡排序<br><br>
&sorter.setStrategy(&quick);<br>
&sorter.performSort(data); // 切换为快速排序<br><br>
&return 0;<br>
}<br>这种设计让算法独立变化,新增策略只需添加新类,不改动已有代码。符合开闭原则,适合需要灵活替换算法的场景。
基本上就这些。关键在于抽象接口和运行时绑定,用组合代替条件分支。
以上就是C++如何实现策略模式选择算法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号