极速理解设计模式系列:17.命令模式(Command Pattern)

五个角色:抽象命令类(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下载。

posted @ 2011-10-20 10:54 程兴亮 阅读(...) 评论(...) 编辑 收藏