命令模式

Posted ningxinjie

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命令模式相关的知识,希望对你有一定的参考价值。

命令模式旨在将"行为请求者"与"行为实现者"解耦

如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。

 关键代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口

 

需要基本使用类,抽象命令与具体命令,通过中介者调用命令指向实用类的方法。

   #region 基本使用类
    public class Document
    {
        //具体操作
        public void Display()
        {
            Console.WriteLine("具体操作");
        }
        public void Undo()
        {
            Console.WriteLine("撤销");
        }
        public void Redo()
        {
            Console.WriteLine("恢复");
        }
    }
    #endregion
  #region 抽象命令
    public abstract class DocumentCommand
    {
        protected Document _document;
        public DocumentCommand(Document document)
        {
            this._document = document;
        }
        public abstract void Execute();
    }
    #endregion
 #region 调用者
    public class DocumentInvoker
    {
        List<DocumentCommand> list = new List<DocumentCommand>();
        public DocumentInvoker(params DocumentCommand[] documentcommands)
        {
            foreach (DocumentCommand item in documentcommands)
            {
                list.Add(item);
            }
        }
        public void Execute()
        {
            foreach (DocumentCommand item in list)
            {
                item.Execute();
            }
        }

    }
    #endregion
 static void Main(string[] args)
        {
            Document doc=new Document();//使用类的实例
            DocumentCommand d1 = new DisplayCommand(doc);//命令类1
            UndoCommand d2 = new UndoCommand(doc);////命令类1

            DocumentInvoker di = new DocumentInvoker(d1,d2);//将这两个命令传给调用者
            di.Execute();
            Console.ReadKey();
        }

技术图片 

基本类正常书写,命令类中内部有使用类,通过方法实现调用使用类的方法,调用者通过调用命令类,触发内部方法,从而触发基本类的方法!

(这种类内部有另一个类的私有成员,很常见了,要牢记!!!)

以上是关于命令模式的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——git命令操作一个完整流程

用于从 cloudkit 检索单列的代码模式/片段

VSCode自定义代码片段——cli的终端命令大全

VSCode自定义代码片段4——cli的终端命令大全

VSCode自定义代码片段15——git命令操作一个完整流程

VSCode自定义代码片段15——git命令操作一个完整流程