以小菜大鸟去烧烤店,给服务员报菜,然后服务员通知厨师为例子。
package com.wzs.design;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 大话设计模式--page238 命令模式
*
* @author Administrator
*
*/
public class CommandMode {
public static void main(String[] args) {
// 开店前准备
Barbecuer boy = new Barbecuer();
Command bakeMuttonCommand1 = new BakeMuttonCommand(boy);
Command bakeMuttonCommand2 = new BakeMuttonCommand(boy);
Command bakeChickenWingCommand = new BakeChickenWingCommand(boy);
Waiter girl = new Waiter();
// 开门营业
girl.setOrder(bakeMuttonCommand1);
girl.setOrder(bakeMuttonCommand2);
girl.setOrder(bakeChickenWingCommand);
// 点菜完毕,通知厨房
girl.notifyA();
}
}
/*
* 烤肉串者
*/
class Barbecuer {
// 烤羊肉串
public void bakeMutton() {
System.out.println("烤羊肉串!");
}
// 烤鸡翅
public void bakeChickenWing() {
System.out.println("烤鸡翅!");
}
}
/*
* 抽象命令
*/
abstract class Command {
protected Barbecuer barbecuer;
public Command(Barbecuer barbecuer) {
this.barbecuer = barbecuer;
}
// 执行命令
public abstract void excuteCommand();
}
/*
* 烤羊肉串命令
*/
class BakeMuttonCommand extends Command {
public BakeMuttonCommand(Barbecuer barbecuer) {
super(barbecuer);
}
@Override
public void excuteCommand() {
barbecuer.bakeMutton();
}
@Override
public String toString() {
return "命令模式,烤羊肉串命令!";
}
}
/*
* 烤鸡翅命令
*/
class BakeChickenWingCommand extends Command {
public BakeChickenWingCommand(Barbecuer barbecuer) {
super(barbecuer);
}
@Override
public void excuteCommand() {
barbecuer.bakeChickenWing();
}
@Override
public String toString() {
return "命令模式,烤鸡翅命令! ";
}
}
/*
* 服务员
*/
class Waiter {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
private List<Command> orders = new ArrayList<Command>();
// 设定订单
public void setOrder(Command command) {
orders.add(command);
System.out.println("增加订单:" + command.toString() + " \t时间:" + simpleDateFormat.format(new Date()));
}
// 取消订单
public void cancelOrder(Command command) {
orders.remove(command);
System.out.println("取消订单:" + command.toString() + " \t时间:" + simpleDateFormat.format(new Date()));
}
// 通知全部执行
public void notifyA() {
for (Command command : orders) {
command.excuteCommand();
}
}
}

1559

被折叠的 条评论
为什么被折叠?



