• 设计模式学习笔记命令模式


    概述:                                                                                                      

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

    适用场合:                                                                                                

    1.抽象出待执行的动作以参数化某对象。

    2.在不同的时刻指定、排列和执行请求。

    3.支持取消操作。

    4.支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。

    5.用构建在原语操作上的高层操作构造一个系统。

    类图:                                                                                                      

    (今天的类图的接口画的规范了,以前的抽空再改过来,呵呵)

    代码示例:                                                                                                

    1.声明命令接口

        /// <summary>
    /// 用来声明执行操作的接口
    /// </summary>
    abstract class Command
    {
    protected Receiver receiver;

    public Command(Receiver receiver)
    {
    this.receiver = receiver;
    }
    abstract public void Excute();
    }

    2.实现命令操作

        /// <summary>
    /// 将接受者对象绑定一个动作,调用接受者相应的操作,以实现Excute
    /// </summary>
    class ConcreteCommand:Command
    {
    public ConcreteCommand(Receiver receiver):base(receiver) { }

    public override void Excute()
    {
    receiver.Action();
    }
    }

    3.给命令发出通知,执行请求

        /// <summary>
    /// 要求该命令执行这个请求
    /// </summary>
    class Invoker
    {
    private Command command;

    public void SetCommand(Command command)
    {
    this.command = command;
    }
    public void ExcuteCommand()
    {
    command.Excute();
    }
    }

    4.接受者

        /// <summary>
    /// 如何实施和执行一个与请求相关的操作,任何类都可能作为一个接受者.
    /// </summary>
    class Receiver
    {
    public void Action()
    {
    Console.WriteLine(
    "执行请求");
    }
    }

    5.客户端调用

            /// <summary>
    /// 测试命令模式
    /// </summary>
    static void TestCommand()
    {
    Receiver r
    = new Receiver();
    Command c
    = new ConcreteCommand(r);
    Invoker i
    = new Invoker();
    i.SetCommand(c);
    i.ExcuteCommand();
    Console.Read();
    }

    小结:                                                                                                         

    命令模式有点晕乎,是为了实现特定的操作而设计的,具体例子,再找找。

  • 相关阅读:
    Python正则表达式指南
    emacs 常用命令与配置
    将代码转换为语法高亮的HTML
    UML 用例图
    Sql Server 2005函数学习(转)
    实现ASP.NET程序性能目标的几种方法转载http://www.wzsky.net/html/Program/net/39759.html
    浅淡SqlServer的Top与Oracle的RowNum 转载自http://www.cnblogs.com/liguangxi8/archive/2010/05/21/1740708.html
    存储过程权限和订单类别
    UrlRewrite(Url重写技术)
    Jquery ajax多级联动
  • 原文地址:https://www.cnblogs.com/jqbird/p/2163531.html
Copyright © 2020-2023  润新知