策略模式(C++)

这篇具有很好参考价值的文章主要介绍了策略模式(C++)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

策略模式是一种行为型设计模式,它定义了一系列的算法,并将每一个算法封装起来,使它们可以相互替换,且不影响客户端的使用。策略模式的目的是将算法的使用与实现分离,降低了算法之间的耦合,提高了代码的可扩展性和可维护性。

策略模式适用于以下场景:

  • 当有多种算法可以实现同一个功能,但是客户端需要根据不同的情况选择不同的算法时,可以使用策略模式。
  • 当一个类定义了多种行为,且这些行为在这个类的操作中以多个条件语句的形式出现时,可以使用策略模式将每个行为封装为一个策略类,消除这些条件语句。
  • 当一个系统需要动态地在几种算法中选择一种时,可以使用策略模式。

策略模式的常用技巧有:

  • 定义一个抽象策略接口,用于规范所有具体策略类的行为。
  • 定义一个上下文类,用于维护一个策略对象的引用,并提供一个方法让客户端可以设置或更换策略对象。
  • 定义一系列具体策略类,实现抽象策略接口,并封装各自的算法逻辑。
  • 客户端通过创建上下文对象,并传入具体策略对象,来使用不同的算法。客户端可以在运行时更换策略对象,实现动态切换算法的功能。

策略模式是一种简单而有效的设计模式,它可以帮助我们实现高内聚低耦合的代码设计原则,提高系统的灵活性和可复用性。文章来源地址https://www.toymoban.com/news/detail-402684.html

C++示例


#include <iostream>
#include <vector>
#include <algorithm>

// 定义排序策略接口
class SortStrategy {
public:
    virtual void sort(std::vector<int>& nums) = 0;
};

// 实现冒泡排序策略
class BubbleSort : public SortStrategy {
public:
    void sort(std::vector<int>& nums) override {
        int n = nums.size();
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (nums[j] > nums[j + 1]) {
                    std::swap(nums[j], nums[j + 1]);
                }
            }
        }
    }
};

// 实现快速排序策略
class QuickSort : public SortStrategy {
public:
    void sort(std::vector<int>& nums) override {
        quickSort(nums, 0, nums.size() - 1);
    }

private:
    void quickSort(std::vector<int>& nums, int left, int right) {
        if (left >= right) {
            return;
        }
        int pivot = partition(nums, left, right);
        quickSort(nums, left, pivot - 1);
        quickSort(nums, pivot + 1, right);
    }

    int partition(std::vector<int>& nums, int left, int right) {
        int pivot = nums[right];
        int i = left;
        for (int j = left; j < right; j++) {
            if (nums[j] < pivot) {
                std::swap(nums[i], nums[j]);
                i++;
            }
        }
        std::swap(nums[i], nums[right]);
        return i;
    }
};

// 定义排序类,使用策略模式
class Sorter {
public:
    Sorter(SortStrategy* strategy) : strategy_(strategy) {}

    void setStrategy(SortStrategy* strategy) {
        strategy_ = strategy;
    }

    void sort(std::vector<int>& nums) {
        strategy_->sort(nums);
    }

private:
    SortStrategy* strategy_;
};

int main() {
    std::vector<int> nums = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
    Sorter sorter(new BubbleSort());
    sorter.sort(nums);
    for (int num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    sorter.setStrategy(new QuickSort());
    sorter.sort(nums);
    for (int num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    return 0;
}

到了这里,关于策略模式(C++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式(十四):行为型之策略模式

    设计模式系列文章 设计模式(一):创建型之单例模式 设计模式(二、三):创建型之工厂方法和抽象工厂模式 设计模式(四):创建型之原型模式 设计模式(五):创建型之建造者模式 设计模式(六):结构型之代理模式 设计模式(七):结构型之适配器模式 设计模式(八):结构型之装

    2024年02月09日
    浏览(43)
  • 设计模式(4)--对象行为(9)--策略

    1. 意图     定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。     本模式使得算法可独立于使用它的客户而变化。 2. 三种角色    抽象策略(Strategy)、具体策略(Concrete Strategy)、上下文环境(Context) 3. 优点     3.1 可重用的相关算法系列。     3.2 一个替代继

    2024年02月04日
    浏览(44)
  • 软件设计模式与体系结构-设计模式-行为型软件设计模式-策略模式

    策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一系列算法,并将每个算法封装在独立的类中,使它们可以相互替换。策略模式使得算法可以独立于使用它们的客户端而变化。 下面是一个使用策略模式的简单代码示例,以解释其工作原理: 在上述示例中,策略模

    2024年02月13日
    浏览(119)
  • 策略模式,一种广泛应用于各种情况的设计模式(设计模式与开发实践 P5)

    定义:定义一系列算法,把它们一个个封装起来,并且可以互相替换 例如,我们要计算年终奖,年终奖根据绩效 A、B、C 来计算最终数值 最初我们很容易想到用 分支 if 来解决这个问题,如果绩效 = A 则工资 x 2,如果绩效 = B 则工资 x 3 如果经常使用这样的分支结构,你会发现

    2024年02月07日
    浏览(42)
  • 【设计模式与范式:行为型】61 | 策略模式(下):如何实现一个支持给不同大小文件排序的小程序?

    上一节课,我们主要介绍了策略模式的原理和实现,以及如何利用策略模式来移除 if-else 或者 switch-case 分支判断逻辑。今天,我们结合“给文件排序”这样一个具体的例子,来详细讲一讲策略模式的设计意图和应用场景。 除此之外,在今天的讲解中,我还会通过一步一步地

    2024年02月10日
    浏览(41)
  • 状态模式【行为模式C++】

    1.概述        状态模式 是一种行为设计模式, 让你能在一个对象的内部状态变化时改变其行为, 使其看上去就像改变了自身所属的类一样。 2.结构 State(抽象状态类): 定义一个接口用来封装与上下文类的一个特定状态相关的行为,可以有一个或多个行为。 ConcreteState(具体

    2024年04月23日
    浏览(8)
  • 策略模式简介

    策略模式( Strategy Pattern )是一种行为型设计模式,它定义了一系列算法,并将每个算法封装到独立的类中,使得它们可以互相替换。通过使用策略模式,客户端可以在运行时选择不同的算法来解决问题。 将算法和使用该算法的客户端代码分离,使得它们可以独立变化。 可

    2024年02月10日
    浏览(14)
  • 访问者模式【行为模式C++】

    1.概述       访问者模式 是一种行为设计模式, 它能将算法与其所作用的对象隔离开来。       访问者模式主要解决的是数据与算法的耦合问题,尤其是在数据结构比较稳定,而算法多变的情况下。为了不污染数据本身,访问者会将多种算法独立归档,并在访问数据时根据

    2024年04月16日
    浏览(32)
  • 《C++设计模式》——行为型

    行为型模式是对在不同的对象之间划分责任和算法的抽象化。行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。 GOOD:把不变的代码部分都转移到父类中,将可变的代码用 virtual 留到子类重写。 template.h main.cpp 备忘录:在不破坏封装性的前提下,捕

    2024年02月09日
    浏览(10)
  • (三)行为模式:2、命令模式(Command Pattern)(C++示例)

    目录 1、命令模式(Command Pattern)含义 2、命令模式的UML图学习 3、命令模式的应用场景 4、命令模式的优缺点 5、C++实现命令模式的实例 1、命令模式(Command Pattern)含义 命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排

    2024年02月12日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包