设计模式之命令模式,command

来源:互联网 发布:美微网络电视看香蕉 编辑:程序博客网 时间:2024/05/26 07:30
Command定义: 将来自客户端的请求传入一个对象,无需了解这个请求激活的动作或有关接受这个请求的处理细节。
----------------------------------------
package liu.command.demo;
public abstract class Command {
 Barbecuer receiver;
 
 public Command(Barbecuer receiver){
  this.receiver = receiver;
 }
 abstract public void ExecuteCommand();
}

 ----------------------------------------
package liu.command.demo;
public class BakeMuttonCommand extends Command {
 public BakeMuttonCommand(Barbecuer receiver) {
  super(receiver);
  
 }
 @Override
 public void ExecuteCommand() {
  receiver.BakeMutton();
 }
}

 ----------------------------------------
package liu.command.demo;
public class BakeChickenWingCommand extends Command {
 public BakeChickenWingCommand(Barbecuer receiver) {
  super(receiver);
  
 }
 
 @Override
 public void ExecuteCommand() {
  receiver.BakeChickenWing();
 }
}

 ----------------------------------------
package liu.command.demo;
public class Barbecuer {
 public void BakeMutton(){
  System.out.println("烤羊肉串");
 }
 
 public void BakeChickenWing(){
  System.out.println("烤鸡翅");
 }
}

 ----------------------------------------
package liu.command.demo;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Waiter {
 private List<Command> orders = new ArrayList<Command>();
 
 public void setOrder(Command command){
  if(command.getClass().equals(BakeChickenWingCommand.class)){
   System.out.println("服务员:鸡翅没有了,请点别的");
  }
  else{
   orders.add(command);
   Date d = new Date();
   
   System.out.println("增加订单"+command.toString()+";时间:"+d.toString());
  }
 }
 
 public void CancelOrder(Command command){
  orders.remove(command);
  Date d = new Date();
  System.out.println("取消订单"+command.toString()+";时间:"+d.toString());
 }
 
 public void Notify(){
  for(Command c:orders){
   c.ExecuteCommand();
  }
 }
}

 ----------------------------------------

 package liu.command.demo;
public class Main {
 /**
  * 命令模式
  */
 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 waiter = new Waiter();
  waiter.setOrder(bakeMuttonCommand1);
  waiter.setOrder(bakeMuttonCommand2);
  waiter.setOrder(bakeChickenWingCommand);
  waiter.Notify();
 }
}
原创粉丝点击