命令模式又称为行动(Action)模 式或交易(Transaction)模式。命令模式把一个请求或者操作封装到一个对象中。

命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象.

每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许

请求的一方和接收的一方独立开来,使 得 请 求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。

命令模式类图:

十五、命令(Command)模式--行为型模式(Behavioral Pattern)

命令模式涉及到五个角色,它们分别是:
  • 客户(Client)角色:创建了一个具体命令 (ConcreteCommand)对象并确定其接收者。 

  • 命令(Command)角色:声明了一个给所有具体命令类 的抽象接口。这是一个抽象角色。 

  • 具体命令(ConcreteCommand)角色:定义一个接受者和行为之间的弱耦合;实现 Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执方法。 

  • 请求者(Invoker)角色:负责调用命令对象执行请求, 相关的方法叫做行动方法。 

  • 接收者(Receiver)角色:负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

示例代码:

class Program
    {
        static void Main(string[] args)
        {
            Receiver r = new Receiver();
            Command command = new ConcreteCommand(r);
            Invoker i = new Invoker();
            i.SetCommand(command);
            i.ExecuteCommand();
            Console.ReadKey();
        }
    }

    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 Receiver
    {
        public void Action()
        {
            Console.WriteLine("Called Receiver.action()");

        }
    }

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

        public void ExecuteCommand()
        {
            command.Execute();
        }
    }
View Code

相关文章: