zoukankan      html  css  js  c++  java
  • 大话设计模式-命令模式

    命令模式

    命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

    对于请求排队或记录请求日志,以及支持可撤销的操作,行为请求者和行为实现者的紧耦合是不合适的。

    命令模式的优点

    命令模式能较容易地设计一个命令模式。在需要的情况下,可以较容易地将命令记入日志。

    允许接受请求的一方决定是否要否决请求。可以很容易地实现对请求的撤销和重做。

    由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。

    命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开来。


      

    命令模式结构演示

    命令抽象

    声明执行操作的接口。

    abstract class Command
    {
        protected Receiver receiver;
        public Command(Receiver receiver) => this.receiver = receiver;
        abstract public void Execute();
    }

    具体命令

    将一个接收者绑定于一个动作,调用接收者相应的操作,以实现执行方法。

    class ConcreteCommand : Command
    {
        public ConcreteCommand(Receiver receiver) : base(receiver) { }
        public override void Execute() => receiver.Action();
    }

    调用者

    要求该命令执行这个请求。

    class Invoker
    {
        private Command command;
        public void SetCommand(Command command) => this.command = command;
        public void ExcuteCommand() => command.Execute();
    }

    接收/执行者

    知道如何实施与执行一个与请求相关的操作,任何类都可能作为一个接收者。

    class Receiver
    {
        public void Action() => Console.WriteLine("执行请求");
    }

    测试结果

    Receiver r = new Receiver();
    Command c = new ConcreteCommand(r);
    Invoker i = new Invoker();
    i.SetCommand(c);
    i.ExcuteCommand();
    //测试结果
    执行请求
  • 相关阅读:
    C#加密算法汇总
    解决无法连接到visual studio开发服务器的问题
    javascript
    js仿移动端的下拉刷新,上拉加载更多。
    博客园第一篇博文——做一个思考行动派
    $("<div />")代表的意思
    ini_set 设置php配置项 在windows和linux下的不同
    Java入门1
    Java入门2
    jQuery获取元素上一个、下一个、父元素、子元素
  • 原文地址:https://www.cnblogs.com/errornull/p/10072907.html
Copyright © 2011-2022 走看看