策略模式(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) 的相关文章

  • 设计模式——Visitor(访问者)模式

    目录 前言 1 定义 2 适用性 3 结构 3 1 结构图 3 2 参与者 4 Java实际应用举例 以ASM技术为例 4 1 被访问对象 ClassReader 4 2 Visitor ClassVisitor 4 3 具体visitor
  • 23种设计模式之装饰模式

    装饰模式 一个简陋的房子 它可以让人在里面居住 为人遮风避雨 但如果给它进行装修 那么它的居住环境就更加宜人了 程序中的对象也与房子十分类似 首先有一个相当于 房子 的对象 然后经过不断装饰 不断对其增加功能 它就变成了使用功能更加强大的对
  • 行为型模式-策略模式

    package per mjn pattern strategy 抽象策略类 public interface Strategy void show package per mjn pattern strategy 具体策略类 用来封装算法
  • C++设计模式(二)观察者模式

    1 观察者模式知识点 1 定义 定义对象间的一种一对多的依赖关系 当一个对象的状态发生改变的时候 所有依赖它的对象都得到通知并自动更新 2 动机 将一个系统分割成一系列相互协作的类有一个常见的副作用 需要维护相关对象间的一致性 我们不希望为
  • Java设计模式:装饰者模式(Decorator Pattern)

    装饰者模式 涉及的重要设计原则 类应该对扩展开放 对修改关闭 装饰者模式定义 装饰者模式动态地将责任附加到对象上 若要扩展功能 装饰者提供了比继承更有弹性的替代方案 UML类图 装饰者模式事例 咖啡店 咖啡种类 1 深焙咖啡 DarkRoa
  • Java设计模式-装饰者模式Decorator

    介绍 装饰者模式的核心思想是通过创建一个装饰对象 即装饰者 动态扩展目标对象的功能 并且不会改变目标对象的结构 提供了一种比继承更灵活的替代方案 需要注意的是 装饰对象要与目标对象实现相同的接口 或继承相同的抽象类 另外装饰对象需要持有目标
  • C++设计模式-State状态模式

    State状态模式作用 当一个对象的内在状态改变时允许改变其行为 这个对象看起来像是改变了其类 UML图如下 State类 抽象状态类 定义一个接口以封装与Context的一个特定状态相关的行为 ConcreteState类 具体状态 每一
  • 六大设计原则--开闭原则

    定义 software entities like classes modules and functions should be open for extension but closed for modifications 一个软件实体
  • 设计模式——简单工厂模式

    简单工厂模式定义为 简单工厂模式又称为静态工厂方法模型 它属于类创建型模式 在简单工厂模式中 可以根据参数的不同返回不同类的实例 简单工厂专门定义一个类来负责创建其他类的实例 被创建的实例通常都具有共同的父类 简单工厂模式结构图 简单工厂模
  • [C++]备忘录模式

    备忘录模式 Memento Pattern 保存一个对象的某个状态 以便在适当的时候恢复对象 备忘录模式属于行为型模式 github源码路径 https github com dangwei 90 Design Mode 此文件包含 mai
  • 设计模式一之简单工厂模式

    生活示例 刻板印刷 gt 活字印刷举例 喝酒唱歌 人生真爽 gt 对酒当歌 人生几何 可维护 需要修改 则只需要改需要改的字即可 可复用 字体可在后来的印刷复用 可扩展 需要加字 只需要加入相应的刻字即可 灵活性好 字的排列可能竖排或横排
  • 每日一问:你想如何破坏单例模式?

    前言 1 单例是什么 单例模式 是一种创建型设计模式 目的是保证全局一个类只有一个实例对象 分为懒汉式和饿汉式 所谓懒汉式 类似于懒加载 需要的时候才会触发初始化实例对象 而饿汉式正好相反 项目启动 类加载的时候 就会创建初始化单例对象 1
  • Tomcat 系统架构与设计模式之工作原理篇

    本文以 Tomcat 5 为基础 也兼顾最新的 Tomcat 6 和 Tomcat 4 Tomcat 的基本设计思路和架构是具有一定连续性的 Tomcat 总体结构 Tomcat 的结构很复杂 但是 Tomcat 也非常的模块化 找到了 T
  • [设计模式]模板方法模式(Template Method)

    1 意图 定义一个操作中的算法的骨架 而将一些步骤延迟到子类中 TemplateMethod使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 2 动机 其实就是如意图所描述的 算法的骨架是一样的 就是有些特殊步骤不一样 就可以
  • 组合型模式

    概述 对于这个图片肯定会非常熟悉 上图我们可以看做是一个文件系统 对于这样的结构我们称之为树形结构 在树形结构中可以通过调用某个方法来遍历整个树 当我们找到某个叶子节点后 就可以对叶子节点进行相关的操作 可以将这颗树理解成一个大的容器 容器
  • 哈工大2020软件构造Lab3实验报告

    本项目于4 21日实验课验收 更新完成 如果有所参考 请点点关注 点点赞GitHub Follow一下谢谢 2020春计算机学院 软件构造 课程Lab3实验报告 Software Construction 2020 Spring Lab 3
  • 二十四种设计模式之策略模式

    一 什么是策略模式 简单来说 策略模式是将每一个算法封装到拥有共同接口的不同类中 使得算法可以在不影响客户端的情况下发生变化 也可以理解为可供程序运行时选择的 不同的类 不同的解决方案 策略模式的特点 高内聚低耦合 可扩展 遵循ocp原则
  • 设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)

    原创 疯狂的狮子Li 狮子领域 程序圈 2023 12 19 10 30 发表于辽宁 原型模式 原型模式 Prototype模式 是指 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 原型模式是一种创建型设计模式 允许一个
  • C++设计模式 #3策略模式(Strategy Method)

    动机 在软件构建过程中 某些对象使用的的算法可能多种多样 经常改变 如果将这些算法都写在类中 会使得类变得异常复杂 而且有时候支持不频繁使用的算法也是性能负担 如何在运行时根据需求透明地更改对象的算法 将算法和对象本身解耦 从而避免上述问题
  • 【设计模式之美】面向对象分析方法论与实现(二):需求到接口实现的方法论

    文章目录 一 进行面向对象设计 1 划分职责 gt 需要有哪些类 2 定义类及其属性和方法 3 定义类与类之间的交互关系 4 将类组装起来并提供执行入口 二 如何进行面向对象编程 1 接口实现

随机推荐

  • 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模式可以整体地替换算法的实现部分 能够整体地替换算法 能让我们轻松地以不同的算法解决同一