首页 > 后端开发 > C++ > 正文

C++如何实现策略设计模式_C++面向对象编程中封装算法族的模式

裘德小鎮的故事
发布: 2025-11-24 19:27:07
原创
993人浏览过
策略模式通过封装不同算法并使其可互换,提升代码灵活性与可维护性;示例中Sorter上下文类利用SortStrategy接口调用具体排序算法,如冒泡排序和快速排序,实现算法与客户端解耦,避免条件判断,符合开闭原则,适用于支付方式、加密算法等多策略场景。

c++如何实现策略设计模式_c++面向对象编程中封装算法族的模式

在C++面向对象编程中,策略设计模式是一种非常实用的行为型设计模式,它允许你定义一系列算法或行为,并将每个行为封装到独立的类中,使得它们可以互相替换。这种模式让算法的变化独立于使用它的客户端代码,提高了代码的灵活性和可维护性。

策略模式的核心思想

策略模式的关键在于“封装变化”。当一个类在运行时需要根据条件选择不同的算法(比如排序方式、支付方式、路径规划等),直接用if-else或switch判断会降低扩展性和可读性。通过策略模式,可以把每种算法封装成一个具体类,统一通过接口调用。

主要角色包括:

  • Strategy(策略接口):定义算法的公共接口。
  • ConcreteStrategy(具体策略):实现具体的算法逻辑。
  • Context(上下文):持有策略对象的引用,用于执行算法。

使用C++实现策略模式

下面是一个简单的示例,展示如何用C++实现不同排序策略(如冒泡排序和快速排序)的切换。

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

#include <iostream>
#include <vector>
#include <algorithm>
<p>// 策略接口
class SortStrategy {
public:
virtual ~SortStrategy() = default;
virtual void sort(std::vector<int>& data) = 0;
};</p><p>// 具体策略:冒泡排序
class BubbleSort : public SortStrategy {
public:
void sort(std::vector<int>& data) override {
int n = data.size();
for (int i = 0; i < n - 1; ++i)
for (int j = 0; j < n - i - 1; ++j)
if (data[j] > data[j + 1])
std::swap(data[j], data[j + 1]);
std::cout << "使用冒泡排序\n";
}
};</p><p>// 具体策略:快速排序(调用标准库)
class QuickSort : public SortStrategy {
public:
void sort(std::vector<int>& data) override {
std::sort(data.begin(), data.end());
std::cout << "使用快速排序\n";
}
};</p><p>// 上下文类
class Sorter {
private:
SortStrategy* strategy_;</p><p>public:
explicit Sorter(SortStrategy* strategy = nullptr) : strategy_(strategy) {}</p><pre class='brush:php;toolbar:false;'>void setStrategy(SortStrategy* strategy) {
    strategy_ = strategy;
}

void performSort(std::vector<int>& data) {
    if (strategy_)
        strategy_->sort(data);
    else
        std::cout << "未设置排序策略!\n";
}
登录后复制

};

Cutout.Pro抠图
Cutout.Pro抠图

AI批量抠图去背景

Cutout.Pro抠图 66
查看详情 Cutout.Pro抠图

使用示例:

int main() {
    std::vector<int> numbers = {5, 2, 8, 1, 9};
<pre class='brush:php;toolbar:false;'>Sorter sorter;
BubbleSort bubbleSort;
QuickSort quickSort;

sorter.setStrategy(&bubbleSort);
sorter.performSort(numbers); // 输出:使用冒泡排序

sorter.setStrategy(&quickSort);
sorter.performSort(numbers); // 输出:使用快速排序

return 0;
登录后复制

}

优点与适用场景

策略模式带来的好处很明显:

  • 算法之间相互独立,易于新增或替换。
  • 避免大量条件语句,提升代码可读性
  • 符合开闭原则——对扩展开放,对修改关闭。

常见应用场景包括:

  • 多种支付方式(微信支付宝、银行卡)。
  • 不同压缩或加密算法的选择。
  • 图形渲染中的着色策略。

基本上就这些。只要抓住“把行为抽象成对象”的核心思路,策略模式就能自然地融入你的C++项目中,帮助你写出更清晰、更易维护的代码。不复杂但容易忽略的是空指针检查和资源管理,实际项目中建议结合智能指针(如std::unique_ptr)来管理策略对象生命周期。

以上就是C++如何实现策略设计模式_C++面向对象编程中封装算法族的模式的详细内容,更多请关注php中文网其它相关文章!

编程速学教程(入门课程)
编程速学教程(入门课程)

编程怎么学习?编程怎么入门?编程在哪学?编程怎么学才快?不用担心,这里为大家提供了编程速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号