커맨드 패턴
커맨드 패턴은 이벤트가 발생했을 때 실행될 기능이 다양하면서도 변경이 필요한 경우에 이벤트를 발생시키는 클래스를 변경하지 않고 재사용하고자 할 때 유용하다.
커맨드 패턴은 실행될 기능을 캡슐화함으로써 기능의 실행을 요구하는 호출자(Invoker) 클래스와 실제 기능을 실행하는 수신자(Receiver)클래스 사이의 의존성을 제거한다. 따라서 실행될 기능의 변경에도 호출자 클래스를 수정 없이 그대로 사용할 수 있게 해준다.
- Command : 실행될 기능에 대한 인터페이스. 실행될 기능을 execute메서드로 선언함.
- ConcreteCommand : 실제로 실행되는 기능 구현. 즉, Command라는 인터페이스 구현함. - Receiver를 Attribute으로 가지고 있음.
- Invoker : 기능의 실행을 요청하는 호출자 클래스 - Command를 Attribute으로 가지고 있음.
- Receiver : ConcreteCommand에서 execute 메서드를 구현할 때 필요한 클래스. 즉, Concrete Command의 기능을 실행하기 위해 사용하는 수신자 클래스.
작동 순서
1) Client가 원하는 커맨드 객체 생성
2) Invoker 객체에 바인딩 : setCommand(wantedCommand)
3) Invoker객체에서는 바인딩된 커맨드 객체의 execute 호출
4) execute method는 Reciver객체의 action method를 호출하여 원하는 기능 실행.
바로 연습문제. ㅇ.ㅇ 짧구만
1-1 클래스 다이어그램
1-2 실행 결과.
Power On
Mute On
Power Off
빈줄.
1-3 TwoButtonController 클래스 설계의 취약점을 OCP 측면에서 설명하라.
button1, 2에서 실행시키고자 하는 기능이 변경되거나 추가될 경우 TwoButtonController를 직접 수정해야한다. 예를 들어, TV가 아닌 스피커로 변경이 된다면, TwoButtonController 내부에 tv 대신 스피커 객체로 바꿔주고, button pressed에 따른 동작도 수정해주어야 하므로, Open Close Principle에 위배된다.
1-4 Command 패턴이용해서 설계 취약점 개선.
2번 연습 문제는 코드로 작성. 아래 git
https://github.com/dhdnjswnd/JavaObjectiveDesignPattern/tree/main/src/chapter8_commandPattern
공부하는 책
'Java > Java 객체지향 디자인 패턴' 카테고리의 다른 글
[Java 객체 지향 디자인 패턴] 10. 데커레이터 패턴 - 여러 기능의 조합 (0) | 2022.05.10 |
---|---|
[Java 객체 지향 디자인 패턴] 9. 옵서버 패턴 - 통보의 캡슐화 (0) | 2022.05.09 |
[Java 객체 지향 디자인 패턴] 7. 스테이트 패턴 - State Pattern : 상태의 캡슐화 (0) | 2022.03.14 |
[Java 객체 지향 디자인 패턴] 6. 싱글턴 패턴 - Singleton Pattern : 단하나! 비동기 시 주의 (0) | 2022.02.23 |
[Java 객체 지향 디자인 패턴] 5. 스트래티지 패턴 - Strategy Pattern~! 전략 패턴~! (0) | 2022.02.23 |
댓글