命令模式是一种数据驱动的设计模式,在命令模式中,请求在对象中作为命令来封装,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把命令直接传给相应的对象,该对象执行命令。使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象 进行沟通,这样方便将命令对象进行存储、传递、调用、增加与管理。
🐤ICommand接口
这是命令接口,定义了一个执行操作的方法Execute()
- public interface ICommand
- {
- void Execute();
- }
🐤具体命令角色ConcreteCommand
实现了ICommand接口。它有一个Receiver对象的引用,并在Execute()方法中调用接收者的Action()方法。
- public class ConcreteCommand : ICommand
- {
- private readonly Receiver _receiver;
-
- public ConcreteCommand(Receiver receiver)
- {
- _receiver = receiver;
- }
-
- public void Execute()
- {
- _receiver.Action();
- }
- }
🐤实现者/接收者(Receiver)角色
它知道如何执行一个请求相关的操作,这里的操作是输出"执行请求!"。
- public class Receiver
- {
- public void Action()
- {
- Console.WriteLine("执行请求!");
- }
- }
🐤调用者/请求者(Invoker)角色
它持有一个命令对象,并在某个时间点调用命令对象的Execute()方法。
- public class Invoker
- {
- private ICommand _command;
-
- public void SetCommand(ICommand command)
- {
- _command = command;
- }
-
- public void ExecuteCommand()
- {
- _command.Execute();
- }
- }
🐤测试类
调用调用者的ExecuteCommand()
方法,从而触发接收者的操作
- class MyClass
- {
- public static void Main(string[] args)
- {
- ICommand command = new ConcreteCommand(new Receiver());
-
- Invoker invoker = new Invoker();
-
- invoker.SetCommand(command);
-
- invoker.ExecuteCommand();
- }
- }