码迷,mamicode.com
首页 > 其他好文 > 详细

再次理解——命令模式

时间:2015-02-15 21:55:44      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:


命令模式是:将一个请求封装为对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。


如何使用洗衣机:你使用洗衣机时,仅仅是去拧动按钮,就可以开始洗衣服了。不需知道如何让洗衣机去洗衣服,这就是典型的命令模式。即命令对象(洗衣服命令、脱水命令)并不知道如何处理命令,会有相应的接收者对象来执行命令(驱动器)。
本例子中:把洗衣服命令和脱水命令封装为对象;调用者Invoker的参数是不同的请求;调用者Invoker实施对请求的排队、记录、撤销等操作。而驱动器Driver才是真正执行操作的接收者,洗衣服命令和脱水命令调用驱动器的操作。

UML图:Driver是接收者,Command、WashCommand、DawaterCommand是命令对象,Invoker是调用者,相当于命令的集合。

技术分享


相应代码

//驱动器,真正执行命令的接收者
public class Driver
{
    public void Wash()
    {
        Console.WriteLine("洗衣机开始洗衣服");
    }
    public void Dawater()
    {
        Console.WriteLine("洗衣机开始脱水");
    }
}
public abstract class Command
{
    protected Driver driver;
    public Command(Driver driver)
    {
        this.driver = driver;
    }
    //以上确定参数,驱动器(Driver)  构造方法
    abstract public void ExcuteCommand();
    //抽象方法
}
//洗衣服命令,调用驱动器的操作
class WashCommand:Command 
{
    public WashCommand(Driver driver)
        : base(driver)
    { }
    //参数和父类一样,子类的构造方法需要调用和父类一样的构造方法,用base关键字
    public override void ExcuteCommand()
    {
        driver.Wash();
    }
}
//脱水命令,调用驱动器的操作
class DawaterCommand : Command
{
    public DawaterCommand(Driver driver)
        : base(driver)
    { }
    public override void ExcuteCommand()
    {
        driver.Dawater();
    }
}
public class Invoker
{
    private Command command;
    public void SetCommand(Command command)
    {
        this.command = command;
    }
    //构造方法,确定参数为Command;设置命令

    public void ExecuteCommand()
    {
        command.ExcuteCommand();
    }
    //调用Command的操作
}

//客户端
        static void Main(string[] args)
        {
            Driver 驱动器 = new Driver();  //实例化,真正执行操作的驱动器
            Command 洗衣服 = new WashCommand(驱动器);  //实例化,具体的命令
            Invoker 调用者 = new Invoker();    //实例化,调用者
            调用者.SetCommand(洗衣服); //设置命令
            调用者.ExecuteCommand();//执行命令
            



再次理解——命令模式

标签:

原文地址:http://blog.csdn.net/zhangmeihong2/article/details/43836809

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!