package design; //烧烤师傅(厨师) public class Barbecuer{ public void bakeMutton(){ System.out.println("烤羊肉串儿"); } public void bakeChicken(){ System.out.println("烤鸡肉串儿"); } }
package design; public class Main{ public static void main(String[] args){ //老板到位了 Barbecuer boy=new Barbecuer(); Command bakeMutton=new BakeMuttonCommand(boy); Command bakeChicken=new BakeChickenCommand(boy); Waiter girl=new Waiter(); girl.setOrder(bakeMutton); girl.setOrder(bakeChicken); girl.setOrder(bakeChicken); girl.removeCommand(bakeMutton); girl.notifyBarbecuer(); } }
package design; import java.util.*; public class Waiter{ //发送命令-命令中包含了对象执行 private Command command; private List<Command> orders=new ArrayList(); //设置订单; public void setOrder(Command command){ this.command=command; orders.add(command); //this.notifyBarbecuer(); } //通知厨师执行 public void notifyBarbecuer(){ for(Command c:orders){ command.excuteCommand(); //orders.remove(command);//清空 } } public void removeCommand(Command cc){ orders.remove(cc); } }
package design; //做规范 public abstract class Command{ public Barbecuer bb;//厨师 public Command(Barbecuer bb){ this.bb=bb; } //执行命名的方法 abstract public void excuteCommand(); }
package design; public class BakeMuttonCommand extends Command{ public BakeMuttonCommand(Barbecuer rr){ super(rr); } public void excuteCommand(){ bb.bakeMutton(); } }
package design; public class BakeChickenCommand extends Command{ public BakeChickenCommand(Barbecuer rr){ super(rr); } public void excuteCommand(){ bb.bakeChicken(); } }