五个角色:抽象命令类(Command)、具体命令类(ConcreteCommand)、调用者(Invoker)、接收者(Receiver)、客户端(Client)
抽象命令类(Command):声明执行操作的接口
具体命令类(ConcreteCommand):内部有一个接收者,调用接收者实现操作。
调用者(Invoker):要求命令执行某个操作
接收者(Receiver):处理具体的操作
客户端(Client):设定好三方链接,调用者直接操作即可。
实现思路:创建一个命令对象,然后设定其接收者,让调用者引用到一个命令对象,最后调用者直接启动操作即可。
类图:
应用场景:用户开一台电脑。
分析:用户(调用者)开电脑时,面对电脑只有一个开关按钮(命令对象),这个开关按钮会让主板(接收者)通电,由主板去做启动电脑的操作。
下面我们在控制台程序去演示一下如何使用Command Pattern:
一、抽象命令类(Command):
- //抽象命令者
- public interface ICommand
- {
- void Execute();
- }
二、具体命令类(ConcreteCommand):
- //具体命令
- public class ConcreteCommand : ICommand
- {
- Receiver receiver;
- public ConcreteCommand(Receiver receiver)
- {
- this.receiver = receiver;
- }
- public void Execute()
- {
- receiver.Operation();
- }
- }
三、调用者(Invoker):
- //调用者
- public class Invoker
- {
- private ICommand command;
- public Invoker(ICommand command)
- {
- this.command = command;
- }
- public void ExecCommand()
- {
- command.Execute();
- }
- }
四、接收者(Receiver):
- //接受者
- public class Receiver
- {
- public void Operation()
- {
- Console.WriteLine("Cpu通电");
- Console.WriteLine("内存通电");
- Console.WriteLine("硬盘通电");
- Console.WriteLine("光驱通电");
- }
- }
五、客户端(Client):
- class Program
- {
- static void Main(string[] args)
- {
- Receiver receciver = new Receiver();
- ICommand cmd = new ConcreteCommand(receciver);
- Invoker user = new Invoker(cmd);
- user.ExecCommand();
- Console.ReadLine();
- }
- }
如需源码请点击 CommandPattern.rar下载。
本文转自程兴亮 51CTO博客,原文链接:http://blog.51cto.com/chengxingliang/827033