Command Pattern
특정 Command를 Object화하여 객체를 필요에 따라 처리하는 패턴
목적
- request를 Object로 캡슐화
- queuing 및 콜백 같은 기존 Object 기반 관계에서 request 처리
사용하는 경우
- request는 다양한 시간대, 순서로 실행될 경우
- request의 history가 필요한 경우
- 호출하는 Object와 호출 받는 Object를 분리해야할 경우
Command Pattern을 사용하지 않을 경우
아래 처럼 버튼의 행동을 수정하기 위해 Client code를 수정해야하는 문제점 존재
Class 다이어그램
- Client : command object를 생성
- Invoker : Client 요청을 받아 Receiver의 액션을 호출
- Receiver : ConcreteCommand에서 execute()를 구현할 때 필요한 클래스. ConcreteCommand의 기능을 실행하기 위해 사용하는 수신자 클래스. Client가 요청한 내용에 대해 액션만 취해주면 됨
- Command : 실행될 Command에 대한 인터페이스.
- ConcreteCommand : 실행되는 Command을 구현하는 클래스. Receiver가 무엇을 처리해야하는지 정의
Sequence 다이어그램
예시 1 - 간단한 Command Pattern
불을 켰다 끌 수 있는 리모컨 시스템을 만들어보자
Command interface 생성
ConcreteCommand 생성
Invoker 생성
Client 코드 작성
예시 2 - 예시 1의 확장 버전
Invoker 내 Null Object 추가하여 Command 초기화
Invoker 내 함수 수정
Client code 수정
예시 3 - Undo command 추가
예시 4 - Command Pattern + Iterator Pattern
반응형
'💻 개발IT > Design Patterns' 카테고리의 다른 글
5. Structural 패턴 - Proxy Pattern (0) | 2022.07.20 |
---|---|
4. Creational 패턴 - Prototype Pattern (0) | 2022.07.19 |
5. Structural 패턴 - Facade Pattern (0) | 2022.07.19 |
3. Behavior 패턴 - Visitor Pattern (0) | 2022.07.19 |
6. Compound 패턴 - MVC Pattern (0) | 2022.03.12 |
5. Structural 패턴 - Bridge Pattern (0) | 2022.03.10 |
5. Structural 패턴 - Composite Pattern (0) | 2022.03.09 |
5. Structural 패턴 - Adapter Pattern (0) | 2022.03.06 |