cleanUrl: /posts/what-is-command-pattern

메소드 호출을 캡슐화 하여 계산의 각 과정부분들을 결정화 시킬 수 있다. 캡슐화된 method 호출을 로그 기록용으로 저장하거나 취소 기능을 구현하고 재사용 할 수 있다. 이 기능을 구현하면서 각 도메인의 핵심적인 로직을 몰라도 되는 변경에 닫혀있고, 확장에 열려있는 코드를 작성해보자.

이 컨텐츠는 Head First의 Design Pattern 책의 6번 챕터인 커맨트 패턴을 정리한 내용입니다

Head First Design Patterns

코드를 모두 입력해두면 컨텐츠 길이가 의미없이 길어질것 같아 Github 에 코드를 올려두었습니다

yevgnenll/spring-study

요구사항

프로그래밍이 가능한 리모콘에 7개의 소켓이 있고, 각 소켓에 필요한 프로그램을 연결한다

각 프로그램을 통해 특정 기능을 on/off 할 수 있다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6ce7d4f6-cf81-4e0e-a534-e9088ca1104e/Screen_Shot_2021-01-12_at_16.03.18.png

이렇게 다양한 클래스가 있는데 어떻게 하나의 리모콘에 연결할 수 있을까?

구현 방법

  1. 리모콘은 제작 업체가 제공한 클래스를 몰라야한다
  2. 작업을 요청한쪽과 그 작업을 처리한 쪽을 분리시킨다.
  3. 사용자가 버튼을 눌렀을 때 작업을 처리하여 리모콘은 자세한 내용을 모르게 한다.

식당에서 발생하는 event 로 이해하는 command pattern

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/328063da-393c-4324-a8a7-38aa7a0a0d46/Screen_Shot_2021-01-12_at_16.05.21.png

고객 → 웨이트리스에게 주문 → 주문서 작성 → 주방장에게 주문 전달