设计模式之笔记--命令模式(Command)
命令模式(Command)
定义
命令模式(Command),将一个请求封闭为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排除或记录请求日志,以及支持可撤销的操作。
类图

描述
Command:定义命令的统一接口;
ConcreteCommand:Command接口的实现者,要执行的具体命令;
Receiver:命令的实际执行者;
Invoker:命令的请求者,是命令模式中最重要的角色,用来对各个命令进行控制。
应用场景
顾客在餐馆用餐的时候,首先由顾客点餐,服务员记录顾客的点餐情况,然后服务员把订单传到后厨,厨师根据订单把顾客点的餐烹饪好。

/// <summary>
/// 厨师
/// </summary>
public class Chef
{
public void CookBeef()
{
Console.WriteLine("大厨开始爆炒牛肉.");
Console.WriteLine("爆炒牛肉出锅.");
} public void CookFish()
{
Console.WriteLine("大厨开始水煮鱼.");
Console.WriteLine("水煮鱼出锅.");
} public void CookEggplant()
{
Console.WriteLine("大厨开始红烧茄子.");
Console.WriteLine("红烧茄子出锅.");
}
} public abstract class Command
{
public string Name { get; set; }
public abstract void Cook();
} /// <summary>
/// 爆炒牛肉
/// </summary>
public class CookBeefCommand : Command
{
private Chef chef; public CookBeefCommand(Chef chef)
{
this.chef = chef;
base.Name = "爆炒牛肉";
} public override void Cook()
{
this.chef.CookBeef();
}
} /// <summary>
/// 红烧茄子
/// </summary>
public class CookEggplantCommand : Command
{
private Chef chef; public CookEggplantCommand(Chef chef)
{
this.chef = chef;
base.Name = "红烧茄子";
} public override void Cook()
{
this.chef.CookEggplant();
}
} /// <summary>
/// 水煮鱼
/// </summary>
public class CookFishCommand : Command
{
private Chef chef; public CookFishCommand(Chef chef)
{
this.chef = chef;
base.Name = "水煮鱼";
} public override void Cook()
{
this.chef.CookFish();
}
} /// <summary>
/// 服务员
/// </summary>
public class Waiter
{
private List<Command> commands; public Waiter()
{
this.commands = new List<Command>();
} public void SetOrder(Command command)
{
this.commands.Add(command);
Console.WriteLine("增加订单:" + command.Name);
} public void CancelOrder(Command command)
{
this.commands.Remove(command);
Console.WriteLine("取消订单:" + command.Name);
} public void Notify()
{
foreach (Command command in this.commands)
{
command.Cook();
}
}
}
设计模式之笔记--命令模式(Command)的更多相关文章
- 设计模式 笔记 命令模式 Command
//---------------------------15/04/25---------------------------- //Conmmand 命令模式----对象行为型模式 /* 1:意 ...
- Java-马士兵设计模式学习笔记-命令模式
一.概述 命令模式 二.代码 1.Client.java public class Client { public void request(Server server){ server.addCom ...
- 学习笔记——命令模式Command
命令模式,将具体操作Receiver封在Command中,调用类只需要知道Command即可.
- 《JAVA设计模式》之命令模式(Command)
在阎宏博士的<JAVA与模式>一书中开头是这样描述命令(Command)模式的: 命令模式属于对象的行为模式.命令模式又称为行动(Action)模式或交易(Transaction)模式. ...
- 命令模式 Command 行为型 设计模式(十八)
命令模式(Command) 请分析上图中这条命令的涉及到的角色以及执行过程,一种可能的理解方式是这样子的: 涉及角色为:大狗子和大狗子他妈 过程为:大狗子他妈角色 调用 大狗子的“回家吃饭”方法 引子 ...
- 设计模式 ( 十三 ) 命令模式Command(对象行为型)
设计模式 ( 十三 ) 命令模式Command(对象行为型) 1.概述 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需 ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- Java 设计模式系列(十四)命令模式(Command)
Java 设计模式系列(十四)命令模式(Command) 命令模式把一个请求或者操作封装到一个对象中.命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复 ...
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
随机推荐
- BZOJ 1924 所驼门王的宝藏(强连通分量缩点+DAG最长链)
思路不是很难,因为宝藏只会在给出的n个点内有,于是只需要在这n个点里面连边,一个点如果能到达另一个点则连一条有向边, 这样用强连通分量缩点后答案就是DAG的最长链. 问题在于暴力建图是O(n^2)的, ...
- MySQL二进制安装部署
#使用二进制包安装mysql -linux-glibc2.-x86_64.tar.gz /data/ -linux-glibc2.-x86_64.tar.gz -C /data/ -linux-gli ...
- hive 连接(join)查询
1.内连接 hive> select b.*,a.name from userinfo2 b,userinfo a where a.userid=b.userid; hive> selec ...
- 【题解】CF#611 H-New Year and Forgotten Tree
有趣啊~手玩一下这棵树,发现因为连边只对相连点的位数有限制,我们可以认为是在往一棵已经有 m 个结点的树上挂叶子结点直到满足要求.(m = log(10) n).注意由于 m 超级无敌小,我们可以直接 ...
- LUCAS定理简述
Lucas定理解决的是n,m比较大而p是小于100000质数 简而言之就是Lucas(n,m)=C(n%p,m%p)*Lucas(n/p,m/p)%p; 其中组合数C是用任意一种计算10五次方内取模的 ...
- Linux内核分析2
周子轩原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 本次实验是通过分析一个简单 ...
- Linux内核分析第四周学习总结——系统调用的工作机制
Linux内核分析第四周学习总结--系统调用的工作机制 内核态 执行级别高,可以执行特权指令,访问任意物理地址,在intel X86 CPU的权限分级为0级. 用户态 执行级别低,只能访问0x0000 ...
- 【loj6198】谢特
Portal -->loj6198 Solution (为什么感觉loj上面这几道后缀数组的题..套路都是一样的啊qwq) 同样也是..考虑某个区间\(height[i]\)的最小值的贡 ...
- Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python
作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...
- vs下取得资源文件中的版本信息
在Windows Mobile和Wince(Windows Embedded CE)下开发的产品,有时候需要显示当前产品的版本信息.一般来说,版本信息是保存在资源文件里面的,例如下图: 为了保持一致, ...