您的位置:首页 > 其它

大话设计模式_命令模式

2013-03-14 21:42 615 查看
以小菜大鸟去烧烤店,给服务员报菜,然后服务员通知厨师为例子。

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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息