Template method pattern
어느 식당에 들어가서 주문을 하려합니다. 이 식당에는 음식을 세트로 판매하고 있습니다.
세트 = 밥 + 국 + 메인반찬 + 추가반찬
위와 같이 세트는 4가지 메뉴로 구성이 되어있습니다. 밥 과 추가반찬은 동일하며 각 세트마다 국과 메인반찬이 변경된다고 합시다. 예를 들어 아래와 같이 세트들이 구성된다고 합시다.
제육세트 = 밥 + 된장국 + 제육볶음 + 추가반찬,
생선세트 = 밥 + 된장국 + 생선구이 + 추가반찬,
해장세트 = 밥 + 콩나물해장국 + 해장에좋은반찬 + 추가반찬
여러분들이 각 세트를 선택함에 따라 국과 메인반찬이 변경됨을 알 수 있습니다.
위 상황을 여러분들이 디자인하고 구현한다고 생각해보시죠. 각 세트메뉴가 클래스가 되고 밥, 국, 메인반찬, 추가반찬을 위한 메소드를 모두 구현하면 될 것 같습니다. readySet() 라는 메소드를 만들어 그 내부에서 각 메뉴를 쟁반에 올려주면 되겠네요!
그럼 이번에 계절메뉴로 새로운 세트가 생겼다고 합시다. 또 밥, 국, 메안반찬, 추가반찬을 쟁반에 놓으면 되나요? 각 세트에서 변경없이 반복되는게 밥과 추가반찬인데요, 이 중복된 음식을 따로 분리해 내면 더 좋을 것 같습니다.
아래 URL에 예제 (Problem / Solving) 이 있습니다. 해당 예제는 Head First Design Pattern 도서를 참고하였습니다.
Design Principle : Hollywood principle
"Don't call us, we'll call you"
상위 모듈이 먼저 하위 모듈에게 연락하기 전에는 하위 모듈이 상위 모듈에게 연락하는 일이 없도록 해야한다는 의미입니다.
Template method pattern은 Strategy pattern과 유사하여 자주 비교되곤 합니다. 원하는 것을 낮은 결합도(Loose coupling)로 변경할 수 있다는 장점과 알고리즘 군의 변경은 유사한데요, Strategy pattern의 경우 전체 알고리즘을 변경하는 것이고, Template method pattern은 알고리즘 집합에서 내부의 몇몇 로직을 변경할 수 있다는 차이가 있을 뿐입니다. :D
감사합니다.
'Software Architecture > Design Pattern' 카테고리의 다른 글
[Design Pattern] Mediator Pattern (0) | 2019.01.07 |
---|---|
[Design Pattern] Iterator Pattern (0) | 2018.12.18 |
[Design Pattern] Null Object Pattern (0) | 2017.02.20 |
[Design Pattern] Observer Pattern (0) | 2014.07.19 |
[Design Pattern] Strategy pattern (0) | 2014.07.15 |