zoukankan      html  css  js  c++  java
  • C# 命令模式(Command)

    理解:把每个命令封装成一个类,当发令者要发布多个命令时,可以一个个排队地发布给接收者,同时记录下每个命令的详细信息,发布时间等。还可以撤销已发布的命令。

    代码:

    using System.Collections.Generic;
    using System.Windows.Forms;

    namespace DesignMode.Command
    {
        //被命令者
        public class QQ
        {
            public void Response_SendMessage()
            {
                MessageBox.Show("消息发送中。。。");
            }

            public void Response_PrintScreen()
            {
                MessageBox.Show("截图中。。。");
            }

            public void Response_Remote()
            {
                MessageBox.Show("远程中。。。");
            }
        }

        //抽象命令类
        public abstract class AbstractCommand
        {
            protected QQ _qq;
            public AbstractCommand(QQ qq)
            {
                this._qq = qq;
            }

            public abstract void Execute();
        }

        //发送消息命令类
        public class SendMessageCommand : AbstractCommand
        {
            public SendMessageCommand(QQ qq):base(qq)
            { }

            public override void Execute()
            {
                base._qq.Response_SendMessage();
            }
        }

        //截图命令类
        public class PrintScreenCommand : AbstractCommand
        {
            public PrintScreenCommand(QQ qq):base(qq)
            { }

            public override void Execute()
            {
                base._qq.Response_PrintScreen();
            }
        }

        //远程命令类
        public class RemoteCommand : AbstractCommand
        {
            public RemoteCommand(QQ qq) : base(qq)
            { }

            public override void Execute()
            {
                base._qq.Response_Remote();
            }
        }

        //发号命令者
        public class Me
        {
            IList<AbstractCommand> cmdList = new List<AbstractCommand>();

            //发布命令
            public void IssueCommand(AbstractCommand command)
            {
                cmdList.Add(command);
            }

            //取消命令
            public void CancelCommond(AbstractCommand command)
            {
                cmdList.Remove(command);
            }

            //执行命令
            public void ExecuteCommand()
            {
                foreach (AbstractCommand c in cmdList)
                {
                    c.Execute();
                }
            }
        }
    }

    客户端代码:

            private void btn_Command_Click(object sender, EventArgs e)
            {
                //定义命令承受者
                QQ qq = new QQ();
               
                //定义具体命令
                SendMessageCommand msg = new SendMessageCommand(qq);
                PrintScreenCommand prt = new PrintScreenCommand(qq);
                RemoteCommand remote = new RemoteCommand(qq);
                
                //定义命令发布者
                Me me = new Me();

                //发布命令
                me.IssueCommand(msg);
                me.IssueCommand(prt);
                me.IssueCommand(remote);

                //取消截图命令
                me.CancelCommond(prt);

                //执行命令
                me.ExecuteCommand();
            }
  • 相关阅读:
    iOS14
    iOS 音量键翻页实现
    pod 相关写法
    js 递归树结构数据查找指定元素的所有父级
    前端实现访问一个图片URL直接下载该图片
    HTML5 drag api 的使用
    vue 组件的 patch
    centos7安装nginx
    nginx常用配置说明
    遍历删除
  • 原文地址:https://www.cnblogs.com/kavilee/p/2362424.html
Copyright © 2011-2022 走看看