码迷,mamicode.com
首页 > 其他好文 > 详细

命令模式

时间:2020-01-15 09:50:08      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:实用   redo   tin   类的方法   方法   invoke   mic   rgs   protect   

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

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

 关键代码:定义三个角色: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();
        }

技术图片 

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

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

命令模式

标签:实用   redo   tin   类的方法   方法   invoke   mic   rgs   protect   

原文地址:https://www.cnblogs.com/ningxinjie/p/12194861.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!