策略模式(Strategy)

2023-11-11

设计模式之策略模式。
策略模式的主要作用是:整体地替换算法。
无论什么程序,其目的都是解决问题。而为了解决问题,我们需要编写特定的算法。使用Strategy模式可以整体地替换算法的实现部分。能够整体地替换算法,能让我们轻松地以不同的算法解决同一个问题,这种模式就是Strategy模式。
示例代码如下:

#include<iostream>
using namespace std;

//策略模式
//准备一组算法,并将每一个算法封装起来,使得他们可以互换。


class Strategy
{
public:
    virtual void Crypto()=0;
    virtual ~Strategy(){}
};

//对称加密   适合于加密大分块的数据  加密和解密密钥一样。
//非对称加密 加密速度慢 加密强度高 安全性高 特点:加密和解密密钥不一样。

class AES:public Strategy
{
public:
    virtual void Crypto()
    {
        cout<<"AES加密"<<endl;
    }
};

class DES:public Strategy
{
public:
    virtual void Crypto()
    {
        cout<<"DES加密"<<endl;
    }
};


class Context
{
public:
    void SetStrategy(Strategy* strategy)
    {
        this->m_strategy = strategy;
    }

    void Operator()
    {
        m_strategy->Crypto();
    }

private:
    Strategy*  m_strategy;
};


int main()
{
    /*
    DES*  des= new DES();
    des->Crypto();

    delete des;
    */


    Strategy*   pStrategy=NULL;

    pStrategy=new DES();
    Context* context=new Context();
    context->SetStrategy(pStrategy);
    context->Operator();

    delete pStrategy;

    pStrategy=new AES();
    context->SetStrategy(pStrategy);
    context->Operator();

    delete pStrategy;
    delete context;


    return 0;
}

执行程序,运行结果如下图所示:
这里写图片描述
该模式在具体的程序库中使用的例子如下(后续补充):

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

策略模式(Strategy) 的相关文章

随机推荐

  • node写可选参数接口

    个人网站 紫陌 笔记分享网 想寻找共同学习交流 共同成长的伙伴 请点击 前端学习交流群 今天写项目接口看到接口文档要求带四个参数两个参数必选两个可选 当时在想可选参数要怎么做 毕竟自己也没有写过 然后想了一天终于想出一个感觉不是最佳的方案
  • 极简教学

    目录 一 安装wget 二 安装git 三 安装pip 四 下载ChatGLM2 6B源码 五 安装Anaconda 六 安装pytorch 七 下载模型库 八 最后的准备工作 九 运行程序 一 安装wget 1 删除自带的wget yum
  • CAN总线的EMC设计方案

    一 CAN接口EMC设计概述 Controller Area Network简称为CAN 多用于汽车以及工业控制 用于数据的传输控制 在应用的过程中通讯电缆容易耦合外部的干扰对信号传输造成一定的影响 单板内部的干扰也可能通过电缆形成对外辐射
  • kafka多线程实现消费者实战

    前言 KafkaProducer是线程安全的 但是KafkaConsumer不是线程安全的 同一个KafkaConsumer用在了多个线程中 将会报Kafka Consumer is not safe for multi threaded
  • emplace_back和push_back的区别

    相同点 两者都是向容器内添加数据 不同点 当数据为类的对象时 emplace back相对push back可以避免额外的移动和复制操作 以下代码copy from点击打开链接 include
  • LeetCode-917. 仅仅反转字母

    给你一个字符串 s 根据下述规则反转字符串 所有非英文字母保留在原有位置 所有英文字母 小写或大写 位置反转 返回反转后的 s 示例 1 输入 s ab cd 输出 dc ba 来源 力扣 LeetCode 双指针 双指针是一种解决问题的技
  • C++中的虚函数(一)

    虽然很难找到一本不讨论多态性的C 书籍或杂志 但是 大多数这类讨论使多态性和C 虚函数的使用看起来很难 我打算在这篇文章中通过从几个方面和结合一些例子使读者理解在C 中的虚函数实现技术 说明一点 写这篇文章只是想和大家交流学习经验因为本人学
  • 互联网项目生产线各环节介绍

    采用敏捷开发模式 每个周期为两周 每次完成5 10个不等的story 然后进入下一个迭代 以此类推 1 需求管理 这个由产品部来负责收集 分析 整理 最终形成一个个可进行开发的story 需求管理工具选用icescrum 2 代码研发 由j
  • flutter image_picker 控件的使用 ---选择系统图片、拍照

    在pubspec yaml中添加依赖 dependencies image picker 0 4 12 1 Dart文件如下 import package flutter material dart import package image
  • CTF_ctfshow_meng新_web1-web24

    打开靶机 发现包含有个config php文件 打开进去没有数据 所以直接开始代码审计吧 有个变量为id 参数必须为1000才能获得flag 但id gt 999直接返回退出了 尝试一下sql注入 整形注入 看一下回显点 回显点为三 版本
  • LTV-MPC

    For compatibility with the adaptive mode the plant model specified in your controller object must be LTI state space OK
  • java中文档注释的标记是_javadoc中文档注释标记的使用

    javadoc中文档注释标记的使用 author 标记 author指定一个类的作者 它的语法如下 author description 其中 description通常是编写这个类的作者名字 标记 author只能用在类的文档中 在执行j
  • PCL 改进体素滤波

    一 改进简介 PCL的VoxelGrid类是通过输入的点云数据创建一个三维体素栅格 用每个体素内用体素中所有点的重心来近似显示体素中的其他点 这样该体素内所有点都用一个重心点来最终表示 该重心点不一定就是原始点云中的点 有失原始点云的细小特
  • 用c语言浮点输出时,如何让小数点后没用的0不显示

    动态控制浮点数小数位数 2020年7月29日 存在问题 C语言把浮点数直接通过sprintf函数保存在字符数组中 末尾的0显得很多余 想办法把末尾的0去掉 解决问题 在打印时 通过格式控制输出 一般情况使用 f即可输出浮点数 我们通过 f
  • linux查看3306是哪个进程占用,linux查看端口占用

    发表于 2019 08 18 21 00 36 by 月小升 一 例子 lsof i 7000 COMMAND PID USER FD TYPE DEVICE SIZE OFF NODE NAME frps 1249 root 3u IPv
  • 二叉树代码

    1 普通二叉树的构建 构建结点以及搜索与删除的方法 public class Node private int no private String name private Node left private Node right priv
  • C++ srand()只能调用一次,否则rand()每次返回相同值

    C srand 只能调用一次 否则rand 每次返回相同值 面试的时候写一个洗牌算法 结果遇到这个问题坑死我了 幸运的是面试官也不太看得出来问题出在哪 他主攻Java 所以给了我足够时间去调试 问题描述 自己创作的洗牌算法 include
  • npm的一些常用命令和被墙问题的解决

    npm node package manager 1 npm网站 npmjs com 2 npm命令行工具 安装 node同时也就已经安装了npm 1 查询npm版本号 在cmd中输入npm v或者npm version即可 2 升级npm
  • java select 函数_五种I/O模型和select函数简介

    一 五种I O模型 1 阻塞I O 我们在前面所说的I O模型都是阻塞I O 即调用recv系统调用 如果没有数据则阻塞等待 当数据到来则将数据从内核空间 套接口缓冲区 拷贝到用户空间 recv函数提供的buf 然后recv返回 进行数据处
  • 策略模式(Strategy)

    设计模式之策略模式 策略模式的主要作用是 整体地替换算法 无论什么程序 其目的都是解决问题 而为了解决问题 我们需要编写特定的算法 使用Strategy模式可以整体地替换算法的实现部分 能够整体地替换算法 能让我们轻松地以不同的算法解决同一