模式的定义与特点

     命令模式(Command Pattern),是将一个请求封装成一个对象,从而使您可以用不同的请求对客户进行参数化。命令模式是把发出命令的责任和执行命令的责任分割开,委派给不同的对象。命令模式允许请求的一方和发送的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否执行,何时被执行以及是怎么被执行的。系统支持命令的撤消。

 

模式的优点

  • 可扩展性较好,灵活。 
  • 降低了系统耦合度。
  • 新的命令可以很容易添加到系统中去。

模式的缺点

  • 使用命令模式可能会导致某些系统有过多的具体命令类。

using DesignPattern.CommandPattern;
using System;

namespace DesignPattern
{
    internal class Program
    {
        static void Main(string[] args)
        {
            CommandHelper();
        }


        #region Pattern - Command
        static void CommandHelper()
        {
            Invoker _invoker = new Invoker();
            Receiver _receiver = new Receiver();
            ICommand _concreteCommand = new ConcreteCommand(_receiver);

            _invoker.SetCommand(_concreteCommand);
            _invoker.ExecuteCommand();

            Console.ReadLine();
        }
        #endregion
    }
}

//======================================================================================

namespace DesignPattern.CommandPattern
{
    /// <summary>
    /// 命令,需要执行的所有命令都在这里声明。
    /// </summary>
    internal interface ICommand
    {
        /// <summary>
        /// 发布命令
        /// </summary>
        void Exrcute();
    }

//======================================================================================

    /// <summary>
    /// 调用命令者,绑定一个命令,并执行该命令。
    /// </summary>
    internal class Invoker
    {
        private ICommand m_command;

        public void SetCommand(ICommand command)
        {
            this.m_command = command;
        }

        public void ExecuteCommand()
        {
            m_command.Exrcute();
        }
    }

//======================================================================================

    /// <summary>
    /// 命令接收者、执行者。  任何类都可以成为接收者
    /// </summary>
    internal class Receiver
    {
        public void Function()
        {
            Console.WriteLine("接收者接到命令,并且执行了");
        }
    }

//======================================================================================

    /// <summary>
    /// 一个具体的命令
    /// </summary>
    internal class ConcreteCommand : ICommand
    {
        Receiver m_receiver;
        /// <summary>
        /// 一个具体的命令,将一个接收者绑定,调用接收者相应的操作,以实现执行命令。
        /// </summary>
        public ConcreteCommand(Receiver receiver)
        {
            this.m_receiver = receiver;
        }

        public void Exrcute()
        {
            m_receiver.Function();
        }
    }
}

总结:

      个人觉得命令者模式,和我们常用的事件差不多,ICommand等于Event,Receiver等于被注册的函数,Invoker等于执行Event的函数。拙见,不对的话还望指出。


希望大家:点赞,留言,关注咯~    
????????????????

唠家常

今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加QQ:841298494,大家一起进步。

  • 客官,看完get之后记得点赞哟!
  • 小伙伴你还想要别的知识?好的呀,分享给你们????

今日推荐