生活中的Command模式之在快餐店吃饭
以下内容是来自<<Head First In Design Pattern>>英文版,介绍Command模式那一章中的一个现实生活中的例子的部分内容,例子跟原文有点不一样,大部分是采用意译,有些地方可能翻译的不妥,还望指出.
(假设你到一个快餐吃饭,简化后的流程大概像上图所示的:1:你作为一个顾客(Customer),把菜单(Order)递给服务员(Waitress),2:服务员(Waitress)拿着菜单(Order),把它放到菜单柜台(对顾客点的菜单作进一步的处理)完了就说“菜单传给厨师的时候到了”3:快餐厨师(Short-Order Cook)按着菜单准备你所点的饭菜)
几个角色的交互情况
(交互由顾客发起,他知道自己想要的是什么也就是说点什么样的菜由他决定(create an order),比如说你对服务员说“我想要一个带奶酪的夹饼还要一个麦芽糖(?malt shake)”这样就有了方法reatOrder(),服务员拿着菜单,上面有顾客点的菜,把它传给菜单柜台处理后,她紧接着“把菜单传给厨师(orderUP())”(即调用orderUP()的方法,这时候的菜单上面写清楚了准备顾客所点的饭菜的所有说明。借助于这个菜单上的一个说明makeBurger(),厨师将会做出夹饼,类似地还会做出Shake。)
几个角色跟相应的职责
一个菜单(这里指的是服务员拿菜单到柜台处理以后形成的)封装了顾客的一个请求,即请求吃什么样的饭菜。将这里的菜单看成是一个对象,一个担当着请求做顾客想要的饭菜的责任的对象。
跟任何对象一样,它可以被传递――从服务员到菜单处理柜台,或者是给下一个服务员接管,由她进行下一步处理。这个菜单有一个接口,它只有一个方法orderUp(),它封装了准备顾客所需的饭菜的所有行为。这个菜单还有个引用,指向的是需要做这些饭菜的对象(在个例子里,指的是厨师)。之所以要做这样的封装是因为要让服务员不必知道菜单里面的详细内容或者是甚至不用知道谁会来做这些饭菜(OK,在现实现生活中一个服务员可能会关心菜单上的详细内容还有谁来做,但是在这个例子里面不做这样的考虑。);她唯一需要做的是通过菜单处理柜台拿到处理过的菜单然后就说“找厨师去!(Order up!)”
上图是经过菜单处理柜台处理以后的菜单,上面显示了一个方法:
Public void orderUp(){
cookmakeBurger();
cookmakeShake();
}
服务员的职责是拿着菜单,然后调用它的方法orderUp()。
服务员的工作很简单:从顾客那里拿到他所点的饭菜的最原始的菜单,继续为顾客服务直到她把这个原始菜单交给菜单处理柜台为止,紧接着调用方法orderUp()为顾客点的饭菜做准备。就像我们所发现的,在这个例子里面,服务员事实上不用担心菜单上的内容是什么或者说谁将要做这些饭菜;她只知道那个经过菜单处理柜台处理过后的菜单有一个方法orderUp()可以给她来调用从而完成她的任务。
现在,每一天,这个服务员的takeOrder()方法可以因为不同的顾客所点的饭菜的不同而
变成参数化了,但是这么多的顾客并不会给服务员的工作带来麻烦,因为她知道所有的菜单都支持orderUp()这个方法而且她可以在需要准备一个饭菜的任何时候来调用这个方法。
厨师知道如何做那些顾客所点的饭菜
厨师是真正知道怎么做那些顾客所点的饭菜的对象。一旦服务员调用方法orderUp(),
厨师实现所有需要做饭菜的方法。请注意服务员跟厨师之间是完全松耦合的:服务员有着菜
单,它封装了有关饭菜的详细内容;她知道在每个菜单上调用一个方法使顾客点的饭菜处于就绪状态。同时,厨师从服务员给她的菜单上得到有关顾客所点的饭菜的说明,这些是他所关心的;他从来都不用直接跟服务员交流。
从快餐店吃饭到命令模式
OK,我们已经花了足够的篇幅来叙述在快餐店吃饭所涉及到的角色以及他们之间的关系还有职责,相信大家对这方面已经很好的理解了。现在我们将重新分析下这个例子来映射到命令模式。你将会所有的角色都是一样的;只是名字改变了罢了。
从上图我们可对应每个对象跟方法和命令模式中的角色名字相对应。
Waitress(服务员)
|
invoker
|
Short Order Cook(厨师)
|
Receiver
|
orderUp(找厨师)
|
execute()
|
Order(菜单,还没经过处理的)
|
Command
|
Customer(顾客)
|
Client
|
takeOrder(从顾客那拿原始菜单)
|
setCommand()
|
命令模式的定义
到目前为止对于在命令模式中类和对象是如何交互我们已经有了很清楚的认识.现在我们将对命令模式进行定义。
首先我们先看看正式(GOF)的定义:
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作。
|
我们来仔细分析下上面的定义。我们知道一个命令对象封装了来自客户端的请求并且通过绑定对于接受者接受请求执行的一系列相应的动作来实现这个请求。为了达到这个目的,它将行为和接受者包装成一个对象只是对外暴露一个方法execute()。当这个方法被调用的时候,它从而委派接受者执行相应的动作。在外面看来,没有别的对象真正知道什么动作被哪个命令接受者执行了;他们只知道是否他们调用了execute()方法,他们的请求将会被实现。我们同样看到了可用不同的请求对客户进行参数化。回到上面的例子,服务员在一天里面通过不同的菜单而被参数化。目前我们还没有遇到的就是对请求排队或记录请求日志,以及支持可撤消的操作。我们不必担心,那些都是对基本的命令模式相当简单的扩展。
按照上面的思路,对应这个实例在下一篇文章里,我写了一个简单的代码,建议一起看,这样效果会更好。
分享到:
相关推荐
这个"Flexsim快餐店仿真案列"提供了一个实际场景,帮助我们理解如何利用Flexsim来优化快餐店的运营流程。 首先,我们需要了解Flexsim的核心概念。它采用可视化编程的方式,用户可以通过拖拽组件、设置参数来构建...
快餐店平面图快餐店平面图快餐店平面图快餐店平面图快餐店平面图
标题 "中南民大数据结构课设_最短路径快餐店.zip" 涉及到一个大学数据结构课程设计项目,其核心目标是寻找最短路径问题。在这个项目中,学生利用编程语言C++来实现迪杰斯特拉(Dijkstra)算法,这是一种用于查找图中...
《美萍快餐店管理标准版》是一款专为快餐店设计的高效管理软件,旨在帮助店主优化日常运营,提升服务质量,减少管理成本。该软件以其实用性和便利性深受用户喜爱,适用于多个快餐店的日常运营场景。 一、系统功能...
在“基于vue做的一个快餐店收银系统”项目中,我们可以深入理解Vue.js如何应用于实际业务场景,这对于初学者来说是一次非常宝贵的学习机会。 Vue.js的核心特性包括数据绑定、组件化、指令系统以及虚拟DOM。数据绑定...
美萍快餐管理系统是一款专业的快餐店管理软件,美萍快餐软件专为餐饮行业中先交钱后消费经营模式而特别定制,解决了餐饮管理软件中对快餐行业管理的难题。 软件界面简洁优美,操作直观简单,无需专门培训即可使用。...
XXX快餐店的库存管理系统就是这样一个专门针对快餐店业务需求设计的解决方案。该系统采用先进的信息技术,旨在优化库存流程,确保食材的新鲜度,避免浪费,并及时补充货源,从而提高快餐店的经济效益。 系统设计...
在本次数据库课程设计中,我们构建了一个快餐店管理系统,它利用了Mysql数据库的强大功能和Java编程语言的灵活性,旨在提供一个用户友好、功能完备的解决方案,以提升快餐店的运营效率。这个系统不仅包括了开发文档...
在本案例中,“快餐店3D餐厅展示模型”是专为快餐店设计的三维模型,用于模拟和展示餐厅的实际布局、装饰风格以及环境效果。 3D模型的设计过程通常包括以下几个关键步骤: 1. **建模**:这是创建3D模型的第一步,...
"快餐店管理系统"作为一个专为餐饮行业设计的软件解决方案,它以绿色、高效为特点,不仅适用于快餐店,还适用于奶茶店、酒店、批发部等多种业态,为经营者提供了全方位的管理支持。下面,我们将深入探讨该系统的各项...
美萍快餐管理系统是一款专业的快餐店管理软件,美萍快餐软件专为餐饮行业中先交钱后消费经营模式而特别定制,解决了餐饮管理软件中对快餐行业管理的难题。软件界面简洁优美,操作直观简单,无需专门培训即可使用。...
快餐店管理系统. 快餐店管理软件 快餐店收银管理
本教程包括三部分内容 1.教程——AHK 快餐店.chm 2.开发工具——SciTE.exe 3.一系列已经写好的autohotkey脚本例子——文中脚本
快餐店管理系统是针对餐饮行业中的快餐店设计的一款软件应用,旨在帮助店主高效地管理日常运营事务,包括订单处理、库存管理、收银结算等多个环节。这款系统对于初学者而言,不仅是一个实用的工具,更是一个了解软件...
4. **纬度和经度坐标**:地理坐标允许我们对数据进行空间分析,比如通过热力图显示快餐店在地理上的聚集程度,或者计算两个快餐店之间的距离。 5. **其他可能的字段**:除了上述基本字段,数据集还可能包含其他信息...
在瞬息万变的商业环境中,快餐店行业面临着激烈的市场竞争。为了在2021年至2026年间实现市场突围,企业必须采取一系列精心策划的战略。本报告将深入探讨如何通过战略创新和市场定位来提升竞争力,以及如何利用科技...
在本篇中,我们将深入探讨一个专为小型快餐店设计的数据库系统,此系统基于SQL Server 2005开发,旨在帮助初学者理解数据库的基本概念和操作。 1. 数据库设计基础 - 表结构:快餐店数据库通常包括多个表,如“客户...
整体来看,报告提供了一组全面的分析数据,从企业基本情况、招聘、人力成本、市场反馈等多方面,为快餐店行业的人力资源管理提供了科学的决策依据。通过这些数据,人力资源部门能够更好地衡量和分析效能,针对性地...
在快节奏的现代生活中,快餐店已成为都市人群不可或缺的生活伴侣。它们以高效、便捷、美味著称,不仅满足了人们日常的饮食需求,更在无形中塑造着城市的餐饮文化。然而,随着市场竞争的日益激烈和消费者需求的不断...