命令模式
模式是从代码中而来的,就是代码的灵活的排列组合,模式不应为了讲清的特设环境而迷惑,而要实践,最好的就是项目,没有项目之前就是敲代码。
提高没有捷径,就是敲代码。
我对命令特设环境的思路:烤肉者保存一个命令的引用,主要作用就是执行继承父类的子类的命令的执行,依靠遍历服务员过来的集合进行按个执行;服务员类利用结合保存客户需要的各个命令。自己的思路是对的,安全按照自己的思路来。请看代码。附件是我学习设计模式的PDF文档。
public class Barbecuer {
private Integer sum = 1;
public Integer getSum() {
return sum;
}
public void setSum(Integer sum) {
this.sum = sum;
}
public void bakeMutton() {
System.out.println("烤羊肉串!");
this.sum = this.sum - 1;
}
public void bakeChickenWing() {
System.out.println("烤鸡翅");
}
}
public abstract class Command {
protected Barbecuer receiver;
public Command(Barbecuer receiver) {
this.receiver = receiver;
}
public abstract void excuteCommand();
}
public class BakeMuttonCommand extends Command {
@Override
public void excuteCommand() {
receiver.bakeMutton();
}
public BakeMuttonCommand(Barbecuer receiver) {
super(receiver);
}
}
public class BakeChickenWingCommand extends Command {
public BakeChickenWingCommand(Barbecuer receiver) {
super(receiver);
}
@Override
public void excuteCommand() {
receiver.bakeChickenWing();
}
}
public class Waiter {
private List<Command> orders = new ArrayList<Command>();
public void setOrder(Command cd) {
orders.add(cd);
}
public void cancelOrder(Command cd) {
orders.remove(cd);
}
public void anotify(Barbecuer boy) {
for(Command cmd:orders) {
if(boy.getSum() == 0) {
System.out.println("羊肉串没了........!");
} else {
cmd.excuteCommand();
}
}
}
}
public class Customer {
public static void main(String[] args) {
Barbecuer boy = new Barbecuer();
Command bakeMutton1 = new BakeMuttonCommand(boy);
Command bakeMutton2 = new BakeMuttonCommand(boy);
Command bakeChickenWing = new BakeChickenWingCommand(boy);
Waiter girl = new Waiter();
girl.setOrder(bakeChickenWing);
girl.setOrder(bakeMutton1);
girl.setOrder(bakeMutton2);
girl.anotify(boy);
}
}