第23章《命令模式》

前端之家收集整理的这篇文章主要介绍了第23章《命令模式》前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

支持可撤销操作。@H_502_1@

502_1@

502_1@

502_1@

502_1@

502_1@

502_1@

增加新的具体命令操作很容易。@H_502_1@

502_1@

502_1@

502_1@

502_1@

502_1@

502_1@

修改点的菜单是对已有操作的修改;后厨根据客人下的单做菜,是执行一个操作;但客人并不需要和后厨直接打交道,而是通过服务员完成点餐、修改菜,在没有食材的情况下否决客人的请求操作。@H_502_1@

502_1@

502_1@

502_1@

代码结构图:@H_502_1@

502_1@

502_1@

502_1@

/**

  • @Author: cxh

  • @CreateTime: 18/1/26 15:52

  • @ProjectName: JavaBaseTest
    */
    public abstract class AbstractCommand{
    protected Barbecuer barbecuer;
    AbstractCommand(){}

    //执行命令
    public abstract void exeCommmand();
    }



/**

  • @Author: cxh
  • @CreateTime: 18/1/26 16:10
  • @ProjectName: JavaBaseTest
    */
    public class BakeChickenWingCmd extends AbstractCommand{
    BakeChickenWingCmd(Barbecuer barbecuer){
    super.barbecuer=barbecuer;
    }
    @Override
    public void exeCommmand() {
    super.barbecuer.bakeChickenWing();
    }
    }


/**

  • @Author: cxh
  • @CreateTime: 18/1/26 16:13
  • @ProjectName: JavaBaseTest
    */
    public class BakeMuttonCmd extends AbstractCommand {
    BakeMuttonCmd(Barbecuer barbecuer){
    super.barbecuer=barbecuer;
    }
    @Override
    public void exeCommmand() {
    super.barbecuer.bakeMutton();
    }
    }


/**

  • @Author: cxh
  • @CreateTime: 18/1/26 16:04
  • @ProjectName: JavaBaseTest
    */
    public class Barbecuer{
    public void bakeMutton(){
    System.out.println("烤羊肉串~");
    }
    public void bakeChickenWing(){
    System.out.println("烤鸡翅~");
    }
    }


/**

  • @Author: cxh

  • @CreateTime: 18/1/26 15:52

  • @ProjectName: JavaBaseTest
    */
    public class Client{
    //测试类
    public static void main(String[] args) {
    Waiter waiter=new Waiter();
    Barbecuer cook=new Barbecuer();

     BakeChickenWingCmd chickenWingCmd=new BakeChickenWingCmd(cook);
     BakeMuttonCmd muttonCmd=new BakeMuttonCmd(cook);
     waiter.acceptRequest(chickenWingCmd);
     waiter.acceptRequest(muttonCmd);
    
     //<a href="/tag/tongzhi/" target="_blank" class="keywords">通知</a>厨师
     waiter.notifyCook();

    }
    }



import java.util.ArrayList;
import java.util.List;

/**

  • @Author: cxh
  • @CreateTime: 18/1/26 15:56
  • @ProjectName: JavaBaseTest
    /
    public class Waiter{
    //用一个list保存很多请求的引用
    List list=new ArrayList<>();
    //接受请求
    public void acceptRequest(AbstractCommand command){
    double a=Math.random()
    10;
    if(a<=5){
    String type=command.getClass().getSimpleName();
    if(type.equals("BakeChickenWingCmd"))
    type="鸡翅";
    else
    type="羊肉";
    System.out.println("不好意思,"+type+"没有了,您可以看一下其他菜品");
    }else{
    list.add(command);
    System.out.println("记录下单日志,如桌号,时间等");
    }
    }
    //撤销请求
    public void cancelRequest(AbstractCommand command){
    list.remove(command);
    }
    //通知后厨做菜
    public void notifyCook(){
    list.forEach(command -> command.exeCommmand());
    }
    }

502_1@

猜你在找的设计模式相关文章