从“在快餐店吃饭”到Command模式(二)

本文介绍了一种基于命令模式的设计方案,通过一个简单的餐厅点餐场景,详细解释了命令模式的基本概念及其在实际应用中的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   
附一个简单的实现代码:
下面的表格是对应这个例子所涉及到的类跟方法对应到命令模式的标准名称:
Waitress(服务员)
invoker
Short Order Cook(厨师)
Receiver
orderUp(找厨师)
execute()
Order(菜单,还没经过处理的)
Command
Customer(顾客)
Client
takeOrder(从顾客那拿原始菜单)
setCommand()
典型的Command模式需要有一个接口.接口中有一个统一的方法,这就是"将命令/请求封装为对象"(在这里为了更好地理解这个实现生活中的例子,我没有使用标准的命令模式中的那些对象名方法名,大家可以按照上面的表格找到对应的标准名称)
public interface Order {
  public abstract void orderUp ( );
}

具体不同命令/请求代码是实现接口Command,为了简单化下面只有一个具体命令,也就是说服务员这时候只接触一个顾客,注意在这里的OrderSlip是服务员把从顾客那拿到的原始菜单经过菜单处理柜台处理之后的菜单(OrderSlip),对于这一点大家慢慢体会下很容易想到怎么跟命令模式中的具体命令角色对应上的
public class OrderSlip  implements Order {
public
Cook cook;
//构造函数被传进一个具体的厨师来做顾客的所点的东西,当orderUp被//调用时,厨师将作为这个请求的接受者。
 public OrderSlip(Cook cook){
   this.cook=cook;
}
// orderUp方法调用命令接受者的方法cookmakeBurger, cookmakeShake
public void orderUp ( ) {
 cook.cookmakeBurger();//让一个厨师做Burger
 cook.cookmakeShake();//让一个厨师做Shake
  }
}
}
Cook
 
cookmakeBurger():void
cookmakeShake():void     
 服务员使用这个菜单,完成她的任务(命令对象)
public class Waitress {
Order order;
public Waitress(){}
public void takeOrder (Order orderslip){//这里对应前面表格中的标准的
//命令模式中的setOrder()
 order= orderslip;
}
  public void fireOrder ( ){//注意,前面我们提到了服务员知道所有的
//菜单都支持orderUp()这个方法而且她可以在需要准备一个饭菜的任何
//时候来调用这个方法。
order. orderUp();
}
}
顾客所做的:
public class Customer {
 public static void main(String []args){
 Waitress waitress=new Waitress();//顾客叫来了一个服务员
 Cook cook=new Cook();//因为顾客是通过服务员简接地请求厨师为他//做吃的
 OrderSlip  orderslip=new OrderSlip(cook);//顾客叫了一个菜单
   waitress.takeOrder(orderslip);//服务员拿到经过处理后的菜单
   waitress.fireOrder();//需要准备一个饭菜的任何时候到了
}
}
 
 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值