命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请示排队或记录请求日志,以及支持可撤消的操作。
优点:第一,它能够较容易的设计一个命令队列;第二,在需要的情况下,可以较容易地将命令记入日志;第三,允许接收请求的一方是否要否决请求。第四,可以容易地实现对请求的撤消和重做;第五,由于加进新的具体命令类不影响其它的类,因此增加新的具体命令类很容易。
命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。
- using System;
- using System.Collections.Generic;
- /** 概述
- * 命令模式(Command):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请示排队或记录请求日志,以及支持可撤消的操作。
- * 优点:第一,它能够较容易的设计一个命令队列;第二,在需要的情况下,可以较容易地将命令记入日志;第三,允许接收请求的一方是否要否决请求。第四,可以容易地实现对请求的撤消和重做;第五,由于加进新的具体命令类不影响其它的类,因此增加新的具体命令类很容易。
- * 命令模式把请求一个操作的对象与知道怎么执行一个操作的对象分割开。
- */
- namespace StuDesignMode.Command
- {
- #region 命令模式
- abstract class AbsCommand
- {
- protected Receiver _receiver;
- public AbsCommand(Receiver receiver)
- {
- _receiver = receiver;
- }
- public abstract void Execute();
- }
- class ConcreteCommand : AbsCommand
- {
- public ConcreteCommand(Receiver receiver) : base(receiver) { }
- public override void Execute()
- {
- this._receiver.Action();
- }
- }
- class Invoker
- {
- private AbsCommand _command;
- public void SetCommand(AbsCommand command)
- {
- this._command = command;
- }
- public void ExecuteCommand()
- {
- this._command.Execute();
- }
- }
- class Receiver
- {
- public void Action()
- {
- Console.WriteLine("执行请求!");
- }
- }
- class ClientTest
- {
- static void Main(string[] args)
- {
- Receiver re = new Receiver();
- AbsCommand command = new ConcreteCommand(re);
- Invoker i = new Invoker();
- i.SetCommand(command);
- i.ExecuteCommand();
- }
- }
- #endregion
- }