1. 정의
- 알고리즘의 골격을 정의한다. 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있으며, 알고리즘 구조는 그대로 유지하면서 알고리즘의 특정 단계를 서브클래스에서 재정의 할 수 있다.
2. 예시
- 커피와 홍차를 만든다.(둘의 제작 과정은 비슷하다.)
3. 그림
4. 클래스 다이어그램
5. 코드
public class Client {
public static void main(String[] args){
CaffeineBeverage tea = new Tea();
tea.prepareRecipe();
System.out.println("------");
CaffeineBeverage coffee = new Coffee();
coffee.prepareRecipe();
}
}
/* 출력
물을 끓인다.
찻잎을 우려낸다.
컵에 음료를 따른다.
레몬을 추가한다.
------
물을 끓인다.
필터로 커피를 우려낸다.
컵에 음료를 따른다.
시럽을 추가한다.
*/
public abstract class CaffeineBeverage {
// 알고리즘군은 바꿀 수 없게 final로 선언했음
final void prepareRecipe(){
boilWater();
brew();
pourInCup();
addCondiments();
}
protected abstract void brew();
protected abstract void addCondiments();
private void pourInCup() {
System.out.println("컵에 음료를 따른다.");
}
private void boilWater() {
System.out.println("물을 끓인다.");
}
}
public class Tea extends CaffeineBeverage{
@Override
protected void brew() {
System.out.println("찻잎을 우려낸다.");
}
@Override
protected void addCondiments() {
System.out.println("레몬을 추가한다.");
}
}
public class Coffee extends CaffeineBeverage{
@Override
protected void brew() {
System.out.println("필터로 커피를 우려낸다.");
}
@Override
protected void addCondiments() {
System.out.println("시럽을 추가한다.");
}
}
https://github.com/kang-seongbeom/design_pattern
💡 Github에서 디자인 패턴 코드를 볼 수 있습니다.
6. 설명
- 카페인 음료를 만드는 과정은 네 가지다.
- 물을 끓임
- 재료를 우려냄
- 컵에 음료를 부음
- 첨가물을 추가함
- 위 네 가지의 과정을 통합한 prepareRecipe()이 템플릿 메소드다.
- prepareRecipe()의 과정 중 2, 4번의 과정을 서브클래스에서 정의한다.
- prepareRecipe()의 알고리즘 구조는 그대로 유지하면서 특정 단계를 서브클래스에서 구현할 수 있게 된다.
'디자인 패턴' 카테고리의 다른 글
디자인 패턴 - 컴포지트 패턴(Composite Pattern) (0) | 2022.11.18 |
---|---|
디자인 패턴 - 반복자 패턴(Iterator Pattern) (0) | 2022.11.18 |
디자인 패턴 - 퍼사드 패턴(Facade Pattern) (0) | 2022.11.17 |
디자인 패턴 - 어댑터 패턴(Adapter Pattern) (0) | 2022.11.17 |
디자인 패턴 - 커맨드 패턴(Command Pattern) (0) | 2022.11.17 |