大话设计模式_命令模式
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();
}
}
}
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();
}
}
}
相关文章推荐
- 《大话设计模式》--- 第23个:命令模式
- 大话设计模式之命令模式
- 《大话设计模式》java实现之命令模式
- <大话设计模式学习一>命令模式
- 十、行为型模式之观察者、命令、状态-----《大话设计模式》
- 大话设计模式-----(九)桥接模式、命令模式
- 大话设计模式--命令模式
- 十、行为型模式之观察者、命令、状态-----《大话设计模式》
- 大话设计模式23----命令模式
- 大话设计模式之命令模式
- 大话设计模式-----命令模式
- 大话设计模式之命令模式
- Mind-manager之大话设计模式 23章命令模式
- 大话设计模式_命令模式c++实现
- 大话设计模式-命令模式
- 大话设计模式-命令模式学习总结
- 命令模式 -- 大话设计模式
- Java程序员从笨鸟到菜鸟之(四十五)大话设计模式(九)迭代器模式和命令模式
- 《大话设计模式》—— 读后感(23)烤羊肉串引来的思考——命令模式