大话设计模式_命令模式

来源:互联网 发布:知合控股 华夏幸福 编辑:程序博客网 时间:2024/05/21 16:23

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

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);}@Overridepublic void excuteCommand() {barbecuer.bakeMutton();}@Overridepublic String toString() {return "命令模式,烤羊肉串命令!";}}/* * 烤鸡翅命令 */class BakeChickenWingCommand extends Command {public BakeChickenWingCommand(Barbecuer barbecuer) {super(barbecuer);}@Overridepublic void excuteCommand() {barbecuer.bakeChickenWing();}@Overridepublic 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();}}}


原创粉丝点击