本文共 2166 字,大约阅读时间需要 7 分钟。
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
1、reciever类
public class Barbecuer { public void bakeMutton(){ System.out.println("烤羊肉串!"); } public void bakeChilkenWing(){ System.out.println("烤鸡翅!"); }}
2、command类
public abstract class Command { protected Barbecuer receiver; public Command(Barbecuer receiver) { this.receiver = receiver; } public abstract void excuteCommand();}
3、具体命令类
public class BakeChickenWingCommand extends Command { public BakeChickenWingCommand(Barbecuer receiver) { super(receiver); } @Override public void excuteCommand() { receiver.bakeChilkenWing(); }}public class BakeMuttonCommand extends Command { public BakeMuttonCommand(Barbecuer receiver) { super(receiver); } @Override public void excuteCommand() { receiver.bakeMutton(); }}
4、invoker类
public class Waiter { private Listlist = new ArrayList<>(); public void setOrder(Command command){ list.add(command); System.out.println("增加新订单:"+command.getClass().getName()); } public void cancelOrder(Command command){ list.remove(command); System.out.println("取消订单:"+command.getClass().getName()); } public void notifyMessage(){ for (Command comand:list) { comand.excuteCommand(); } }}
5、测试类
public class Test { public static void main(String[] args) { //开店前准备 Barbecuer boy =new Barbecuer(); BakeChickenWingCommand bakeChickenWingCommand = new BakeChickenWingCommand(boy); BakeChickenWingCommand bakeChickenWingCommand1 = new BakeChickenWingCommand(boy); BakeMuttonCommand bakeMuttonCommand = new BakeMuttonCommand(boy); Waiter girl = new Waiter(); //顾客点菜 girl.setOrder(bakeChickenWingCommand); girl.setOrder(bakeChickenWingCommand1); girl.setOrder(bakeMuttonCommand); //通知厨房 girl.notifyMessage(); }}输出:增加新订单:com.zbf.commandMode.BakeChickenWingCommand增加新订单:com.zbf.commandMode.BakeChickenWingCommand增加新订单:com.zbf.commandMode.BakeMuttonCommand烤鸡翅!烤鸡翅!烤羊肉串!
注:参考文献《大话设计模式》程杰著。