行为型模式 - 命令模式Command

 

模式的定义与特点

     命令模式(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之后记得点赞哟!
  • 小伙伴你还想要别的知识?好的呀,分享给你们😄

今日推荐

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫磊落长歌行

觉得小黑这篇文章不赖,打赏哟~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值