设计模式之笔记--命令模式(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 ...
随机推荐
- Contest 3
A:非常裸的dp. #include<iostream> #include<cstdio> #include<cstdlib> #include<cstrin ...
- SPA页面性能优化
1. 快速启动 —— 极大提升加载速度(important) 快速启动应用,并行发起 Bundle 加载&拉取初始数据.相信大家已经发现了,SPA 初始化时候,不得不等待 bundle 返回并 ...
- P3469 [POI2008]BLO-Blockade
题意翻译 在Byteotia有n个城镇. 一些城镇之间由无向边连接. 在城镇外没有十字路口,尽管可能有桥,隧道或者高架公路(反正不考虑这些).每两个城镇之间至多只有一条直接连接的道路.人们可以从任意一 ...
- 洛谷 P4139 上帝与集合的正确用法
题目描述 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“元”构成的集合.容 ...
- Codeforces Round #406 (Div. 2)滚粗记
A 一看到题,不是一道解不定方程的裸题吗,调了好久exgcd. 其实一个for就好了啊 B 一直WA ON TEST 7真是烦,一想会不会是编号太大了,又写了一个map版本,无用. 调了好久好久才发现 ...
- 【loj2472】IIIDX
Portal --> loj2472 Solution 感觉是一道很有意思的贪心题啊ovo(想了一万个假做法系列==) 比较直观的想法是,既然一个数\(i\)只会对应一个\(\lfloor\fr ...
- 【HEOI 2018】制胡窜
转载请注明出处:http://www.cnblogs.com/TSHugh/p/8779709.html YJQ的题解把思路介绍得很明白,只不过有些细节说得还是太笼统了(不过正经的题解就应该这个样子吧 ...
- c++多态性详解(转)
什么是多态? 多态一词最初来源于希腊语,意思是具有多种形式或形态的情形,当然这只是字面意思,它在C++语言中多态有着更广泛的含义. 这要先从对象的类型说起!对象的类型有两种: 实例:Derived1类 ...
- 给深度学习入门者的Python快速教程 - 基础篇(转)
原文:https://zhuanlan.zhihu.com/p/24162430 5.1 Python简介 本章将介绍Python的最基本语法,以及一些和深度学习还有计算机视觉最相关的基本使用. 5. ...
- springboot创建maven多模块项目
SpringBoot创建maven多模块项目 项目结构 该项目名称为springboot-maven-multi,由springboot-maven-multi.user-dao.user-domai ...