首页 > 其他分享 >设计模式之命令模式

设计模式之命令模式

时间:2022-10-06 11:13:51浏览次数:68  
标签:Execute 设计模式 text 模式 命令 Command UI 执行

命令模式

概念

Command is a behavioral design pattern that turns a request into a stand-alone object that contains all information about the request. This transformation lets you pass requests as a method arguments, delay or queue a request’s execution, and support undoable operations.

命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。

场景

有这样一个UI界面,用户可以编辑文本。用户可以通过

  • 点击工具栏的复制按钮
  • 右键菜单的复制选项
  • 按下ctrl+c

这几种方式复制一段文本,这时候你可以在这三种场景下,调用某一个copy方法,并将需要复制的文本内容,光标位置,是否能全部拷贝,这些信息作为参数传达给这个方法。

这样的实现将UI与业务逻辑层绑在了一块,非常不灵活。推荐的做法的是将复制封装成一个command对象,在这3个场景下面仅仅调用这个命令即可。

原先对方法的调用改成对command实例的调用,原先传递给方法的参数,将作为command的各种成员变量,在构造的时候被传递。

优势

  • 充当中间层,进一步将UI界面与业务逻辑分离,原先UI层访问业务逻辑层的具体方法,现在UI层仅仅负责触发命令,不了解命令的内部实现,也不了解命令的执行时机。命令可能被装载到一个执行队列中,在某个时机被执行
  • 方便实现 Undo/Redo 操作

案例

首先定义一个接口,用来指定命令的执行方法

    public interface ICommand
    {
        void Execute();
    }

 

接着根据业务需求,实现一批Command

    class FirstCommand : ICommand
    {
        private string _text;

        public FirstCommand(string text)
        {
            this._text = text;
        }

        public void Execute()
        {
            Console.WriteLine($"First Command Execute");
        }
    }

 

需要的时机,执行Command

new FirstCommand("xxx").Execute();

 

实际应用中不需要向上面立即执行Command,可以将执行Command的逻辑委托给另外一个类,这个类负责在特定时机执行Command。

标签:Execute,设计模式,text,模式,命令,Command,UI,执行
From: https://www.cnblogs.com/chenyingzuo/p/16757205.html

相关文章

  • 查看网络状态netstat和ss命令
    ####yum-yinstallnetstat安装netstat命令#netstat命令查看网络状态#netstat-lnp查看监听端口#-l表示监听#netstat-an查看系统的网络所有连接状况#netstat-l......
  • CentOS命令
    防火墙#查看状态active(running)打开了;inactive(dead)关闭了。systemctlstatusfirewalld.service#临时关闭sudosystemctlstopfirewalld#临时打开sudosys......
  • 5-互评-OO之接口-DAO模式代码阅读及应用
    DAO模式是接口的一个典型应用。阅读附件中的参考代码,并回答以下问题:StudenDaoListImpl.java与StudentDaoArrayImpl.java有何不同?StudenDaoListImpl.java采用List存......
  • 分组密码的基本的工作模式、优缺点
    1、电子密码本ECB(Electroniccodebook)需要加密的消息按照块密码的块大小被分为数个块,并对每个块进行独立加密。适用于数据较少的情况,比如加密秘钥。优点:简单、快速、......
  • Debug命令和汇编指令介绍
    8086CPU地址:物理地址:段地址16+偏移地址逻辑地址:段地址:偏移地址物理内存地址:段地址16+偏移地址逻辑内存地址:段地址:偏移地址内存单元=1Byte。内存单元是字节单元,也就......
  • ping命令的多种玩法,以前竟然只用它来测试网速!
    作为开发人员,ping命令无疑是使用比较多的工具,我们经常在需要判断与服务器的连接是否连桶时需要使用ping命令来测试。【阅读全文】一般情况下使用ping命令来判断路由地址......
  • 设计模式-外观模式
    将多个内部模块的调用封装在一个类中。这个外观模式的化,它是facade模式,这个是它的一个英文名啊,那我们这边的话呢,还是一样啊,上来给大家举一个场景吧,这个场景啊,假设我们现在......
  • 一篇文章让你彻底理解Java的单例设计模式
    下文是笔者编写的单例模式实现的八种方式,如下所示:单例模式的简介我们将一个类在当前进程中只有一个实例的这种模式,称之为“单例模式”那么Java代码如何实现一个单例模式呢?......
  • 基本的doc命令
    一、打开doc窗口的方式(cmd)1、开始菜单-->windows系统文件夹-->命令提示符-->点击如下图2、快捷键Win+R-->输入cmd-->回车/点击确定(推荐使用)如下图3、在任意文件夹......
  • Linux命令全解
    strace获取某个可执行文件执行过程中用到的所有系统调用:strace-fg++main.cpp&|vim查看g++编译过程调用了哪些系统调用,通过管道符用vim接收:%!grepexecve:......