• 命令模式


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

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

     关键代码:定义三个角色: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 DisplayCommand : DocumentCommand
        {
            public DisplayCommand(Document document) : base(document)
            {
            }
            public override void Execute()
            {
                _document.Display();
            }
        }
        public class UndoCommand : DocumentCommand
        {
            public UndoCommand(Document document) : base(document)
            {
            }
            public override void Execute()
            {
                _document.Undo();
            }
        }
        public class RedoCommand : DocumentCommand
        {
            public RedoCommand(Document document) : base(document)
            {
            }
            public override void Execute()
            {
                _document.Redo();
            }
        }
        #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();
            }

     

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

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

  • 相关阅读:
    iOS
    iOS多线程编程之GCD的常见用法
    iOS多线程编程之GCD的基本使用
    iOS多线程编程之线程的状态
    iOS多线程编程之GCD介绍
    iOS多线程编程之线程间的通信
    iOS多线程编程之创建线程安全
    iOS多线程编程之创建线程
    iOS多线程编程之多线程简单介绍
    服务网关
  • 原文地址:https://www.cnblogs.com/ningxinjie/p/12194861.html
Copyright © 2020-2023  润新知