public abstract class Command {
protected Barbecuer receiver;
public Command(Barbecuer receiver){
this.receiver = receiver;
}
public abstract void executeCommand();
}
3. 创建具体Command类对象 继承Command类
1. 定义接受命令者类
public class Barbecuer {
public void bakeMutton(){
System.out.println("烤羊肉串!");
}
public void bakeChickenWing(){
System.out.println("烤鸡翅!");
}
}
2. 定义具体BakeMuttonCommand类对象
public class BakeMuttonCommand extends Command{
public BakeMuttonCommand(Barbecuer receiver) {
super(receiver);
}
@Override
public void executeCommand() {
receiver.bakeMutton();
}
@Override
public String toString() {
return "烤羊肉串";
}
}
3.定义具体BakeChickenWingCommand类对象
public class BakeChickenWingCommand extends Command{
public BakeChickenWingCommand(Barbecuer receiver) {
super(receiver);
}
@Override
public void executeCommand() {
receiver.bakeChickenWing();
}
@Override
public String toString() {
return "烤鸡翅";
}
}
4.定义服务者类 处理客户和接受命令者的中间人
public class Waiter {
private List<Command> orders = new ArrayList<>();
//设置订单
public Waiter setOrder(Command command){
//System.out.println(command.toString());
if(command.toString().equals("烤鸡翅")){
System.out.println("服务员:鸡翅没有了,请点别的烧烤");
}else {
orders.add(command);
System.out.println("增加订单:"+command.toString() + " 时间:"+ new Date(System.currentTimeMillis()));
}
return this;
}
//取消订单
public void cancelOrder(Command command){
orders.remove(command);
System.out.println("取消了一份:"+command.toString());
}
//通知执行
public void notifyExcute(){
System.out.println("增加的订单数:"+orders.size());
for ( Command c: orders) {
c.executeCommand();
}
}
}
5. 测试类
@org.junit.Test
public void test(){
//烤串师傅
Barbecuer boy = new Barbecuer();
Command c1 = new BakeChickenWingCommand(boy);
Command c2 = new BakeMuttonCommand(boy);
Command c3 = new BakeMuttonCommand(boy);
//服务员
Waiter girl = new Waiter();
girl.setOrder(c1)
.setOrder(c2)
.setOrder(c3);
girl.notifyExcute();
}