에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다
1. 커맨드 패턴
- 요청 내용 캡슐화
- 객체를 서로 다른 요청 내역에 따라 매개변수화 할 수 있음
요소
- Receiver: 실제 작업을 수행하는 객체
- Command: 작업을 캡슐화
- Invoker: 작업 실행을 요청하는 객체
장점
- 작업을 요청하는 쪽과 작업을 처리하는 쪽을 분리할 수 있음
2. 리모컨
리모컨 (Receiver)
public class RemoteControl {
Command[] onCommands, offCommands;
Command undoCommand;
public RemoteControl() {
onCommands = new Command[7];
offCommands = new Command[7];
Command noCommand = new NoCommand();
for (int i = 0; i < onCommands.length; i++) { onCommands[i] = offCommands[i] = noCommand; }
undoCommand = noCommand;
}
public void setCommand(int slot, Command onCommand, Command offCommand) {
onCommands[slot] = onCommand;
offCommands[slot] = offCommand;
}
public void onButtonWasPushed(int slot) {
onCommands[slot].execute();
undoCommand = onCommands[slot];
}
public void offButtonWasPushed(int slot) {
offCommands[slot].execute();
undoCommand = offCommands[slot];
}
public void undoButtonWasPushed() { undoCommand.undo(); }
}
명령 (Command)
public interface Command {
void execute();
void undo();
}
- 명령 내용 캡슐화
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) { this.light = light; }
public void execute() { light.on(); }
public void undo() { light.off(); }
}
execute()
- 명령을 처리함
- invoker의 행동이 실행됨
undo()
- 명령을 롤백함
기기 (Invoker)
on()
3. 활용
작업 큐
- 요청을 큐에 저장 가능
호출자와 수신자 간의 분리
- 유연하고 확장 가능한 설계 가능
행동 복구 가능
- 작업 취소 기능을 사용할 수 있음
- 메서드
- store(): 작업의 히스토리를 디스크에 기록 (직렬화)
- load(): 애플리케이션이 재시작되면, 저장된 히스토리를 역직렬화하여 다시 불러옴
- execute(): 불러온 작업 히스토리를 순서대로 실행하여 애플리케이션을 복구
'Java > Design Pattern' 카테고리의 다른 글
[헤드퍼스트 디자인 패턴] 7-2. 퍼사드 패턴 (0) | 2024.12.17 |
---|---|
[헤드퍼스트 디자인 패턴] 7-1. 커맨드 패턴 (0) | 2024.12.17 |
[헤드퍼스트 디자인 패턴] 5. 싱글턴 패턴 (1) | 2024.12.16 |
[헤드퍼스트 디자인 패턴] 4. 팩토리 패턴 (0) | 2024.12.16 |
[헤드퍼스트 디자인 패턴] 3. 데코레이터 패턴 (1) | 2024.12.16 |