
→ 슬롯에 명령 할당 하기


RemoteControl : 여러개의 Command를 가짐. on, off, undo 등을 list 형태로 관리RemoteControl 코드public class RemoteControl {
private static final int MAX_COMMANDS = 7;
private List<Command> onCommands = new ArrayList<>(); // 커맨드 타입의 배열 1(on)
private List<Command> offCommands = new ArrayList<>(); // 커맨드 타입의 배열 2(off)
private Command undoCommand;
public RemoteControl() {
Command noCommand = new NoCommand();
for (int i = 0; i < MAX_COMMANDS; i++) {
onCommands.add(i, noCommand);
offCommands.add(i, noCommand);
}
}
public void setCommand(int slot, Command onCommand, Command offCommand) {
onCommands.set(slot, onCommand);
offCommands.set(slot, offCommand);
}
public void onButtonWasPushed(int slot) {
onCommands.get(slot).execute();
}
public void offButtonWasPushed(int slot) {
offCommands.get(slot).execute();
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append("\n------리모트 컨트롤------\n");
for (int i = 0; i < MAX_COMMANDS; i++) {
buf.append("[Slot ").append(i).append("]");
buf.append(onCommands.get(i).getClass().getName()).append(" ");
buf.append(offCommands.get(i).getClass().getName()).append("\n");
}
return buf.toString();
}
}→ Command 인터페이스에 undo() 메서드 추가 및 리모콘에 undoCommand 객체 추가
// 교재 p.253 참조
→ MacroCommand 클래스 생성 후, Command 배열을 받아서 커맨드 실행
public void execute() {
for (int i = 0; i< commands.length; i++){
command[i].execute();
}
}