行为型模式 - 命令模式Command

2023-10-29

 

模式的定义与特点

     命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

 

模式的优点

  • 可扩展性较好,灵活。 
  • 降低了系统耦合度。
  • 新的命令可以很容易添加到系统中去。

模式的缺点

  • 使用命令模式可能会导致某些系统有过多的具体命令类。

using DesignPattern.CommandPattern;
using System;

namespace DesignPattern
{
    internal class Program
    {
        static void Main(string[] args)
        {
            CommandHelper();
        }


        #region Pattern - Command
        static void CommandHelper()
        {
            Invoker _invoker = new Invoker();
            Receiver _receiver = new Receiver();
            ICommand _concreteCommand = new ConcreteCommand(_receiver);

            _invoker.SetCommand(_concreteCommand);
            _invoker.ExecuteCommand();

            Console.ReadLine();
        }
        #endregion
    }
}

//======================================================================================

namespace DesignPattern.CommandPattern
{
    /// <summary>
    /// 命令,需要执行的所有命令都在这里声明。
    /// </summary>
    internal interface ICommand
    {
        /// <summary>
        /// 发布命令
        /// </summary>
        void Exrcute();
    }

//======================================================================================

    /// <summary>
    /// 调用命令者,绑定一个命令,并执行该命令。
    /// </summary>
    internal class Invoker
    {
        private ICommand m_command;

        public void SetCommand(ICommand command)
        {
            this.m_command = command;
        }

        public void ExecuteCommand()
        {
            m_command.Exrcute();
        }
    }

//======================================================================================

    /// <summary>
    /// 命令接收者、执行者。  任何类都可以成为接收者
    /// </summary>
    internal class Receiver
    {
        public void Function()
        {
            Console.WriteLine("接收者接到命令,并且执行了");
        }
    }

//======================================================================================

    /// <summary>
    /// 一个具体的命令
    /// </summary>
    internal class ConcreteCommand : ICommand
    {
        Receiver m_receiver;
        /// <summary>
        /// 一个具体的命令,将一个接收者绑定,调用接收者相应的操作,以实现执行命令。
        /// </summary>
        public ConcreteCommand(Receiver receiver)
        {
            this.m_receiver = receiver;
        }

        public void Exrcute()
        {
            m_receiver.Function();
        }
    }
}

总结:

      个人觉得命令者模式,和我们常用的事件差不多,ICommand等于Event,Receiver等于被注册的函数,Invoker等于执行Event的函数。拙见,不对的话还望指出。


希望大家:点赞,留言,关注咯~    

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

行为型模式 - 命令模式Command 的相关文章

  • C++设计模式(8)——命令模式

    命令模式 亦称 动作 事务 Action Transaction Command 意图 命令模式是一种行为设计模式 它可将请求转换为一个包含与请求相关的所有信息的独立对象 该转换让你能根据不同的请求将方法参数化 延迟请求执行或将其放入队列中
  • c++享元模式

    享元模式 1 享元模式简介 享元模式在 设计模式 可复用面向对象软件的基础 一书中是这样说的 运用共享技术有效地支持大量细粒度的对象 本质就是对大量细粒度的对象进行共享 不是每个对象都要通过new的方式去创建 而是通过区分对象的内部状态和外
  • 设计模式——Visitor(访问者)模式

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

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

    大侠必备 杀进程 命令 ps ef grep java 先查java进程ID kill 9 PID 生产环境谨慎使用 kill killall pkill命令的区别 kill 通过pid来杀死进程 killall killall 参数 进程
  • 设计模式学习笔记(一)之单例模式

    单例模式 作用 保证一个类只有一个实例 并且提供访问这个实例的全局访问点 应用场景有 数据库连接池 spring中 Bean默认是单例 Servlet中 每一个Servlet是单例 配置文件的类 一般是单例 优点 单例只生成一个实例 减少系
  • 设计模式——原型模式

    原型模式顾名思义 就是指以某个实例为原型 copy出一个新的实例 该实例属性与原型相同或者是类似 很多时候 我们需要创建大量的相同或者相似的对象 如果一个个用new 构造函数的形式去创建的话比较繁琐 就像孙悟空要想变出成千上万个猴子猴孙总不
  • 设计模式之享元模式

    一 背景 在面向对象程序设计过程中 有时会面临要创建大量相同或相似对象实例的问题 创建那么多的对象将会耗费很多的系统资源 它是系统性能提高的一个瓶颈 例如 围棋和五子棋中的黑白棋子 图像中的坐标点或颜色 局域网中的路由器 交换机和集线器 教
  • 六大设计原则--开闭原则

    定义 software entities like classes modules and functions should be open for extension but closed for modifications 一个软件实体
  • Java并发编程之设计模式

    同步模式之保护性暂停 1 定义 即 Guarded Suspension 用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程 让他们关联同一个 GuardedObject 如果有结果不断从一个线程到另一个线
  • 设计模式(5)-适配器模式(Adapter Pattern)

    适配器模式 Adapter Pattern 顾名思义 就像变压器 转接头差不多 就像美国的生活电压是110V 中国是220V 就需要一个变压器将220V转换成110V 或者一个Type C接口想插如USB接口的东西 你就需要一个转换器 而这
  • 设计模式--提供者模式provider

    设计模式 C 提供者模式 Provider Pattern 介绍 为一个API进行定义和实现的分离 示例 有一个Message实体类 对它的操作有Insert 和Get 方法 持久化数据在SqlServer数据库中或Xml文件里 根据配置文
  • linux内核中的设计模式

    创建型 Object Pool Object Pool模式可以提升性能 尤其是在对象的分配 初始化成本高 使用频率高 但使用时间短的情况下 对象池可以设置对象池的大小和回收时间缓存预分配的对象 NT和Linux都有简单的预分配缓存对象的机制
  • HeadFirst 设计模式学习笔记10——MVC分析

    1 M V C Model View Controller 模式 视图 控制器 这是一种范型 模型对象正是应用系统存在的理由 你设计的对象 包含了数据 逻辑和其他在你的应用领域创建定制的类 视图通常是控件 用来显示和编辑 控制器位于二者中间
  • 设计模式(2)

    2 2 结构型模式 结构型模式一共有七种 其中 适配器模式和装饰模式统称为包装模式 装饰模式和代理模式的类图基本相同 但目的不同 这些有相似目的或者有相似结构的模式需要对其概念辨析清楚 才能较好地掌握 下面将对结构型模式分别进行介绍 2 2
  • 设计模式—迭代器模式解析

    本文参考学习了 图解设计模式 中的代码实现和原理解释 迭代器模式 简介 Iterator 模式用于在数据集合中按照顺序遍历集合 就类似于我们的循环 一个个去遍历一个集合中的所有元素 示例代码 首先我们思考一个书本和书架的关系 显然 书架可以
  • QT实现四则运算计算器

    include widget h include ui widget h Widget Widget QWidget parent QWidget parent ui new Ui Widget ui gt setupUi this thi
  • Java设计模式:模板方法模式

    作者主页 欢迎来到我的技术博客 个人介绍 大家好 本人热衷于 Java后端开发 欢迎来交流学习哦 如果文章对您有帮助 记得 关注 点赞 收藏 评论 您的支持将是我创作的动力 让我们一起加油进步吧 文章目录 一 模板方法模式的定义 二 模板方
  • 【设计模式之美】理论一:怎么才算是单一原则、如何取舍单一原则

    文章目录 一 如何判断类的职责是否足够单一 二 类的职责是否设计得越单一越好 开始学习一些经典的设计原则 其中包括 SOLID KISS YAGNI DRY LOD 等 本文主要学习单一职责原则的相关内容 单一职责原则的定义 一个类只负责完
  • 2023 年精选:每个 DevOps 团队都应该了解的 5 种微服务设计模式

    微服务彻底改变了应用程序开发世界 将大型整体系统分解为更小 更易于管理的组件 这种架构风格的特点是独立 松散耦合的服务 带来了从可扩展性 模块化到更高的灵活性等众多优势 DevOps 团队如何最好地利用这种方法来实现最高效率 答案在于理解并

随机推荐

  • 安装openssh-server报Depends: openssh-client (= 1:6.6p1-2ubuntu2.8)错误

    SFTP称作 安全的FTP 它使用ssh文件传输协议 所以我们需要安装openssh server ubuntu自带的有openssh client 所以可以通过 ssh username host 来远程连接linux 可是要想通过ssh
  • Python项目实战 —— 05. 小红书达人大盘分析

    Python项目实战 Python项目实战 目录 Python项目实战 05 小红书达人大盘分析 一 背景 二 可视化 三 代码 Python项目实战 目录 Python项目实战 05 小红书达人大盘分析 大家可以关注知乎或微信公众号的sh
  • Android 一个TextView中设置文字不同字体大小和颜色的最完整方法

    在做项目的时候 经常会遇到过一行文字有两种颜色 有时候直接会想到用多个TextView来实现 今天就介绍一下更为简单的方法 用一个TextView实现 效果 这几个都实现了一行字有不同颜色 还有两个字体大小也不一样 我们下边一一介绍 首先x
  • 嵌入式(IO多路复用)

    多路复用 int main 客户端 include net h void usage char s printf n s serv ip serv port s printf n t serv ip server ip address pr
  • 微信小程序隐私指引完整填写范本(开发者收集你选中的照片或视频信息,用于?)

    为了分辨用户 开发者将在获取你的明示同意后 收集你的微信昵称 头像 为了显示距离 开发者将在获取你的明示同意后 收集你的位置信息 开发者收集你的地址 用于获取位置信息 开发者收集你的发票信息 用于维护消费功能 为了用户互动 开发者将在获取你
  • 关于网络布线

    目录 一 信号 什么是信号 信号的分类 两种信号的差异 调制解调器 modem 的作用 二 有线传输介质 1 双绞线 首选 2 双绞线分类 3 光纤 4 光纤的分类 5 以太网接口 6 光纤接口 7 信息插座 8 双绞线的连接规范 9 UT
  • WindowsMTU修改

    MTU是英文Maximum Transmission Unit的缩写 意为 最大传输单位 也就是通过TCP IP协议所传输的数据包最大有多少字节 对于网速有极大的影响 MTU并非越大越好 前提是你要改大设备必须支持Jumbo frame 巨
  • Vue+element-ui上传logo图片到后端生成二维码展示到页面

    Vue element ui上传logo图片生成二维码展示到页面 该文章将介绍如何通过前端上传二维码logo图片在后台生成二维码 并将生成的二维码转换成Base64编码返回给前端在页面展示 用户扫码二维码跳转至指定页面 话不多说直接上代码
  • map简要用法

    map find 用find函数来定位数据出现位置 它返回的一个迭代器 当数据出现时 它返回数据所在位置的迭代器 如果map中没有要查找的数据 它返回的迭代器等于end函数返回的迭代器 程序说明 include include includ
  • 软通动力离职证明_跳槽必知的辞职理由参考!新人离职理由原来可以这样说

    无论是职场新人或资深同事想转工 都要想一个冠冕堂皇又有说服力的辞职理由 人工低 无得升职几乎是99 打工仔转工的主因 但要跟上司开口辞职 又似乎不太得体 想知有哪些辞职理由较易被上司接受 立即参考以下建议 1 体弱多病的同事辞职 身体健康问
  • Java 8Lambda表达式详解

    Lambda表达式是Java 8引入的一项重要特性 它提供了一种简洁而灵活的方式来定义匿名函数 Lambda表达式使得代码更具可读性和可维护性 并且在某些场景下能够提升代码的执行效率 本文将深入解析Lambda表达式的定义 语法 使用方法
  • Linux调试器gdb

    目录 一 关于Linux调试器gdb 二 gdb的操作 1 quit 2 l 3 r 4 b 行号 info b 5 d 断点编号 6 n 7 p 变量名 8 s 9 bt 10 finish 11 display 变量名 12 until
  • 喏,你们要的58条 Allegro 使用技巧汇总整理好了

    1 鼠标设定 在ALLEGRO视窗 LAYOUT时 每执行一个指令例 Add connect Show element等鼠标会跳到Option窗口 这样对layout造成不便 控制面版 滑鼠之移动选项中 指到预设按钮 或智慧型移动 取消 在
  • unity接入百度Unit理解与交互机器人和语音合成

    using Newtonsoft Json Linq using System using System Collections using System Collections Generic using System Diagnosti
  • C++ 封装文件操作类

    暂时封装一个文件输出类 平时要用的时候方便一些 include
  • leetcode随机刷933最近的请求次数

    933 最近的请求次数 先上题目 一段C 代码 class RecentCounter public queue
  • mmseg分词算法思路分析(中文新闻分词实测结论总结)

    首先先介绍一下mmseg分词算法 再详细分析新闻分词所用分词方式及其逻辑 一 mmseg分词算法 mmseg是一个非常好用的分词器 开箱即用 那么为什么还要了解其算法呢 1 没有任何一样技术可以直接适用于任何场景 了解其算法才能知道什么场景
  • Horizon8基础环境准备08——CA证书

    前言 在我们配置好connection服务器后 基本都会遇到CA证书的问题 这章原本打算和AD一起写的 但考虑到前期环境没有搭建完成 所以放到connection服务配置后再写 只有我们在遇到问题后 想办法解决了 才会印象深刻 正文 1 登
  • 小程序 web-view分享页面检测页面路径跳转

    需求 分享H5页面 打开小程序首页 进入指定的分享H5页面 1 分享函数 onShareAppMessage function Object object 监测分享页面 console log Object object 商城分享页面 re
  • 行为型模式 - 命令模式Command

    模式的定义与特点 命令模式 Command Pattern 是将一个请求封装成一个对象 从而使您可以用不同的请求对客户进行参数化 命令模式是把发出命令的责任和执行命令的责任分割开 委派给不同的对象 命令模式允许请求的一方和发送的一方独立开来