设计模式之笔记--命令模式(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 ...
随机推荐
- BZOJ3745 COCI2015Norma(分治)
完全想不到地,考虑分治. 对区间[l,r],将左端点x由mid不断左移,右边记录最右的p满足max[mid+1,p]<=max[x,mid],q满足min[mid+1,q]>=min[x, ...
- 《转》理解Object.defineProperty的作用
对象是由多个名/值对组成的无序的集合.对象中每个属性对应任意类型的值.定义对象可以使用构造函数或字面量的形式: var obj = new Object; //obj = {} obj.name = ...
- 两种方法实现TAB菜单及文件操作
1,自定义属性的方法实现----TAB菜单操作 cursor:pointer; 鼠标的小手 <!DOCTYPE html> <html lang="en"> ...
- Last Position of Target
For a given sorted array (ascending order) and a target number, find the first index of this number ...
- [CodeVs3196]黄金宝藏(DP/极大极小搜索)
题目大意:给出n(≤500)个数,两个人轮流取数,每次可以从数列左边或者右边取一个数,直到所有的数被取完,两个人都以最优策略取数,求最后两人所得分数. 显然这种类型的博弈题,第一眼就是极大极小搜索+记 ...
- python析构函数
class Test(object): def __init__(self, name): self.name = name print('这是构造函数') def say_hi(self): p ...
- DES解码
DES加解密算法是一个挺老的算法了,现在给出它的C语言版. des.h #ifdef __cplusplus extern "C" { #endif ]); char* des(c ...
- 在服务器上运行Jar包
在服务器上运行Jar包 并且该Jar包依赖其他的Jar文件的时候,采用如下格式 java -Djava.ext.dirs=你依赖的Jar文件路径 -jar 你要运行的Jar文件 包名+类名 例如: j ...
- Oracl闪回数据命令。
当数据库操作没有备份,并且误删数据.可闪回任何 当前闪回15分钟前数据库状态. alter table BASE_APPOINT_LOG enable row movement;flashback ...
- Python学习笔记(二十)调试
摘抄自: https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143191557 ...