路边摊吃烧烤,老板只有一人,又要记住点单,又要忙着收费,客户作什么都要排队。。。ide
若是客户多了,请求多,就容易混乱,他叫五串羊肉串,你叫三个烤鸡翅,老板哪里忙得过来。代码中的体现就是一句一句输出,因此应该要有个服务员。。。优化
/** * 抽象命令 * Created by callmeDevil on 2019/12/14. */ public abstract class Command { protected Barbecuer receiver; public Command(Barbecuer receiver){ this.receiver = receiver; } // 执行命令 public abstract void excuteCommand(); }
/** * 烤羊肉串命令 * Created by callmeDevil on 2019/12/14. */ public class BakeMuttonCommand extends Command{ public BakeMuttonCommand(Barbecuer receiver){ super(receiver); } @Override public void excuteCommand() { receiver.bakeMutton(); } }
/** * 烤鸡翅命令 * Created by callmeDevil on 2019/12/14. */ public class BakeChickenWingCommand extends Command{ public BakeChickenWingCommand(Barbecuer receiver){ super(receiver); } @Override public void excuteCommand() { receiver.bakeChickenWing(); } }
/** * 烤肉串者 * Created by callmeDevil on 2019/12/14. */ public class Barbecuer { public void bakeMutton(){ System.out.println("烤羊肉串!"); } public void bakeChickenWing(){ System.out.println("烤鸡翅!"); } }
/** * 服务员 * Created by callmeDevil on 2019/12/14. */ public class Waiter { private Command command; // 无论什么用户想要什么烤肉,反正都是命令,只管记录订单,而后通知烤肉串者便可 public void setOrder(Command command){ this.command = command; } public void notifying(){ command.excuteCommand(); } }
public class Test { public static void main(String[] args) { // 开店前的准备 Barbecuer boy = new Barbecuer(); Command bakeMuttonCommand1 = new BakeMuttonCommand(boy); Command bakeMuttonCommand2 = new BakeMuttonCommand(boy); BakeChickenWingCommand bakeChickenWingCommand1 = new BakeChickenWingCommand(boy); Waiter girl = new Waiter(); // 开门营业 girl.setOrder(bakeMuttonCommand1); girl.notifying(); girl.setOrder(bakeMuttonCommand2); girl.notifying(); girl.setOrder(bakeChickenWingCommand1); girl.notifying(); } }
运行结果this
烤羊肉串! 烤羊肉串! 烤鸡翅!
其实服务员那里能够完善,好比点单的时候不是一个一个点,而是点完以后一块儿给单;并且还没有烤肉时,订单也能够进行更改或取消,烤肉的人也是不少肉一块儿烤,等等,此处就不优化了。设计
将一个请求封装为一个对象,从而使你可用不一样的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操做。日志
敏捷开发原则告诉咱们,不要为代码添加基于猜想的、实际不须要的功能。若是不清楚一个系统是否须要命令模式,通常就不要着急去实现它,事实上,在须要的时候经过重构实现这个模式并不困难,只要在真正须要如撤销/恢复操做等功能时,把原来的代码重构为命令模式才有意义。code