package com.command;
public interface Command {
void action();
void setCooker(Cooker cooker);
Cooker getCooker();
}
package com.command;
public class CakeCommand implements Command {
private Cooker cooker;
@Override
public void action() {
cooker.doCake();
}
@Override
public void setCooker(Cooker cooker) {
this.cooker = cooker;
}
@Override
public Cooker getCooker() {
return cooker;
}
}
package com.command;
public class PizzaCommand implements Command {
private Cooker cooker;
@Override
public void action() {
cooker.doPizza();
}
@Override
public void setCooker(Cooker cooker) {
this.cooker = cooker;
}
@Override
public Cooker getCooker() {
return cooker;
}
}
package com.command;
public class Cooker {
public void doCake() {
System.out.println("do a cake!");
}
public void doPizza() {
System.out.println("do a pizza!");
}
}
package com.command;
import java.util.ArrayList;
public class Waiter {
private Cooker cooker;
private ArrayList<Command> commandList = new ArrayList<Command>();
public void receive(Command command) {
command.setCooker(cooker);
commandList.add(command);
}
public void execute() {
for (Command c : commandList) {
c.action();
}
}
public Cooker getCooker() {
return cooker;
}
public void setCooker(Cooker cooker) {
this.cooker = cooker;
}
public ArrayList<Command> getCommandList() {
return commandList;
}
public void setCommandList(ArrayList<Command> commandList) {
this.commandList = commandList;
}
}
package com.command;
public class Test {
public static void main(String[] args) {
Cooker cooker = new Cooker();
Waiter waiter = new Waiter();
waiter.setCooker(cooker);
waiter.receive(new CakeCommand());
waiter.receive(new PizzaCommand());
waiter.receive(new CakeCommand());
waiter.execute();
}
}