美高梅平台下载-美高梅娱乐平台登录

热门关键词: 美高梅平台下载,美高梅娱乐平台登录

定义抽象命令和多个具体的命令,首先定义命令

日期:2019-10-06编辑作者:美高梅平台下载

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

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

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

源文地址:

下面举例说明:

下面举例说明:

适用场景

对于大多数请求响应模式的功能,比较适合使用命令模式,命令模式对实现记录日志、撤销操作等功能比较方便。

首先定义命令的具体执行者

首先定义命令的具体执行者

优点

  1. 它能容易地设计一个命令队列;
  2. 在需要的情况下,可以较容易地将命令记入日志;
  3. 允许接受请求的一方决定是否要否决请求;
  4. 可以容易地实现对请求的撤销和重做;
  5. 美高梅平台下载 ,由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。
     /// <summary>
    /// 命令接受者,有具体的执行发法
    /// </summary>
    public class Receiver
    {
        public void WriteError(string errorMsg)
        {
            Console.WriteLine("Error: {0}",errorMsg);
        }

        public void WriteInfo(string infoMsg)
        {
            Console.WriteLine("Info: {0}",infoMsg);
        }
    }
     /// <summary>
    /// 命令接受者,有具体的执行发法
    /// </summary>
    public class Receiver
    {
        public void WriteError(string errorMsg)
        {
            Console.WriteLine("Error: {0}",errorMsg);
        }

        public void WriteInfo(string infoMsg)
        {
            Console.WriteLine("Info: {0}",infoMsg);
        }
    }

缺点

美高梅娱乐平台登录 ,增加系统的复杂性,这里的复杂性应该主要指的是类的数量

定义抽象命令和多个具体的命令:

定义抽象命令和多个具体的命令:

UML结构图

美高梅娱乐平台登录 1DecoratorPattern

    /// <summary>
    ///命令抽象类,需要一个命令的执行者
    /// </summary>
    public abstract class Command
    {
        protected Receiver receiver;

        public Command(Receiver writer)
        {
            receiver = writer;
        }

        abstract public void ExcuteCommand();
    }

    /// <summary>
    /// 具体的命令类,调用接受者执行具体的方法
    /// </summary>
    public class WriteErrorCommand : Command
    {
        private string msg;
        public WriteErrorCommand(Receiver writer, string msg) : base(writer) 
        {
            this.msg = msg;
        }

        public override void ExcuteCommand()
        {
            receiver.WriteError(msg);
        }
    }

    public class WriteInfoCommand : Command
    {
         private string msg;
        public WriteInfoCommand(Receiver writer, string msg) : base(writer) 
        {
            this.msg = msg;
        }
        public override void ExcuteCommand()
        {
            receiver.WriteInfo(msg);
        }
    }
    /// <summary>
    ///命令抽象类,需要一个命令的执行者
    /// </summary>
    public abstract class Command
    {
        protected Receiver receiver;

        public Command(Receiver writer)
        {
            receiver = writer;
        }

        abstract public void ExcuteCommand();
    }

    /// <summary>
    /// 具体的命令类,调用接受者执行具体的方法
    /// </summary>
    public class WriteErrorCommand : Command
    {
        private string msg;
        public WriteErrorCommand(Receiver writer, string msg) : base(writer) 
        {
            this.msg = msg;
        }

        public override void ExcuteCommand()
        {
            receiver.WriteError(msg);
        }
    }

    public class WriteInfoCommand : Command
    {
         private string msg;
        public WriteInfoCommand(Receiver writer, string msg) : base(writer) 
        {
            this.msg = msg;
        }
        public override void ExcuteCommand()
        {
            receiver.WriteInfo(msg);
        }
    }

本文由美高梅平台下载发布于美高梅平台下载,转载请注明出处:定义抽象命令和多个具体的命令,首先定义命令

关键词:

特别的是在一些框架中,为其他对象提供一种代

即ProxyPattern,23种常用的面向对象软件的设计模式之一。为其他对象提供一种代理以控制对这个对象的访问。在某些情...

详细>>

prototype.(用原型实例指定创建对象的种类,但是

原型模式 一. 概念 定义:Specify the kinds of objects to create using a prototypicalinstance,and create new objects by copying thisprototype.(...

详细>>

代码会变成什么样,可以使用策略模式

策略.jpg 本文仅仅为入门,高手勿喷。 策略模式 定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以...

详细>>

对于扩展的话,通知观察者来扩展功能

咖啡店,客户可能会叫一种饮料,并且指定某些调料加入进去,比如深焙咖啡,用摩卡,奶泡,牛奶作为调料,计算...

详细>>