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

在C++中实现策略模式选择算法,核心是将不同算法封装成独立的类,并通过统一接口在运行时动态切换。这种方式避免了使用大量条件判断(如 if/else 或 switch),提高代码的可扩展性和可维护性。
定义策略接口
策略模式从一个抽象基类开始,该基类声明算法的公共接口。通常是一个虚函数,供具体策略类重写。
示例:
假设我们要实现不同的排序算法作为策略:
class SortStrategy {
public:
&virtual ~SortStrategy() = default;
&virtual void sort(std::vector& data) const = 0;
};
实现具体策略
每个具体算法继承自策略基类,并实现自己的逻辑。
立即学习“C++免费学习笔记(深入)”;
class BubbleSort : public SortStrategy {
public:
&void sort(std::vector& data) const override {
&// 冒泡排序实现
&}
};
class QuickSort : public SortStrategy {
public:
&void sort(std::vector& data) const override {
&// 快速排序实现
&}
};
class MergeSort : public SortStrategy {
public:
&void sort(std::vector& data) const override {
&// 归并排序实现
&}
};
上下文类使用策略
Context 类持有策略对象的指针或引用,客户端可在运行时指定使用的算法。
class Sorter {
private:
&const SortStrategy* strategy;
public:
&Sorter(const SortStrategy* s) : strategy(s) {}
&void setStrategy(const SortStrategy* s) {
&strategy = s;
&}
&void performSort(std::vector& data) const {
&if (strategy)
& strategy->sort(data);
&}
};
客户端使用示例
根据需求切换不同算法,无需修改核心逻辑。
int main() {
&std::vector data = {5, 2, 9, 1, 5};
&BubbleSort bubble;
&QuickSort quick;
&Sorter sorter(&bubble);
&sorter.performSort(data); // 使用冒泡排序
&sorter.setStrategy(&quick);
&sorter.performSort(data); // 切换为快速排序
&return 0;
}
这种设计让算法独立变化,新增策略只需添加新类,不改动已有代码。符合开闭原则,适合需要灵活替换算法的场景。
基本上就这些。关键在于抽象接口和运行时绑定,用组合代替条件分支。
以上就是C++如何实现策略模式选择算法的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1475962.html
微信扫一扫
支付宝扫一扫