大话设计模式_命令模式

以小菜大鸟去烧烤店,给服务员报菜,然后服务员通知厨师为例子。

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();
		}
	}
}


你可能感兴趣的:(命令模式,大话设计模式,羊肉串)