• C#设计模式:命令模式(Command Pattern)


    一,什么是命令模式(Command Pattern)?

    命令模式:将请求封装成命令对象,请求的具体执行由命令接收者执行;

    二,如下代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _14.命令模式
    {
        //命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。
        //在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
        class Program
        {
            /// <summary>
            /// 中国人发出命令
            /// </summary>
            /// <param name="args"></param>
            static void Main(string[] args)
            {
                // 初始化Receiver、Invoke和Command
                Command c = new Command();
                c.AddReceiver(new JanReceiver());
                c.AddReceiver(new UsaReceiver());
                ChineseInvoke i = new ChineseInvoke(c);
    
                ////中国人发出命令
                i.ExecuteCommand();
            }
        }
        /// <summary>
        /// 中国人,负责调用命令对象执行请求
        /// </summary>
        public class ChineseInvoke
        {
            public Command _command;
    
            public ChineseInvoke(Command command)
            {
                this._command = command;
            }
    
            public void ExecuteCommand()
            {
                Console.WriteLine("中国人说,该干啥子干啥子去!!");
                _command.Action();
            }
        }
        /// <summary>
        ///  命令抽象类
        /// </summary>
        public class Command
        {
            // 命令执行方法
            private List<Receiver> list = new List<Receiver>();
            public void AddReceiver(Receiver receiver)
            {
                list.Add(receiver);
            }
            public  void Action()
            {
                // 调用接收的方法,因为执行命令的是学生
                foreach (var item in list)
                {
                    item.Execute();
                }
            }
        }
        /// <summary>
        /// 抽象接收者
        /// </summary>
        public abstract class Receiver
        {
            public abstract void Execute();
        }
        /// <summary>
        /// 具体接收者
        /// </summary>
        public class JanReceiver:Receiver
        {
            public override void Execute()
            {
                Console.WriteLine("日本人吃饭");
            }
        }
        /// <summary>
        ///  具体接收者
        /// </summary>
        public class UsaReceiver : Receiver
        {
            public override void Execute()
            {
                Console.WriteLine("美国人吃饭");
            }
        }
    
    }

     三,根据命令模式我们分为下面几个角色,

    抽象命令 :Command

    抽象接收者:Receiver

    命令接收者:执行命令(JanReceiver,UsaReceiver)

    命令调用者:(ChineseInvoke)

    客户端:发送命令

    四,在命令模式中,我们将客户端发送的指令封装成一个对象,如我们的吃和睡觉指令,我们将这两个行为以命令的形式包裹在一个对象中,然后传递给命令接受者执行命令,而这里调用者角色与接收者角色之间没有任何依赖关系,调用者实现功能时只需调用ChineseInvoke抽象类的ExecuteCommand方法就可以,实现命令的调用

  • 相关阅读:
    《学习之道》第六章总结
    《学习之道》第六章一心多用
    《学习之道》第六章无视干扰
    《学习之道》第六章番茄工作法
    《学习之道》第六章关注过程,亦培养习惯
    《学习之道》第六章学习方法23与小恶魔较劲
    《学习之道》第六章习惯的部分-信念
    《学习之道》第六章习惯的部分-奖励机制
    《学习之道》第六章习惯的部分-反应程序
    使用Python验证常见的50个正则表达式
  • 原文地址:https://www.cnblogs.com/May-day/p/8875786.html
Copyright © 2020-2023  润新知