Java/Design Pattern

[헤드퍼스트 디자인 패턴] 8. 템플릿 메서드 패턴

noahkim_ 2024. 12. 18. 19:24

에릭 프리먼 님의 "헤드퍼스트 디자인 패턴" 책을 정리한 포스팅 입니다

 

1. 템플릿 메서드 패턴

  • 알고리즘의 각 단계를 정의하며, 서브클래스에서 일부 단계를 구현할 수 있도록 유도하는 패턴

 

장점
  • 알고리즘의 구조가 유지됨
  • 알고리즘의 특정 단계를 서브클래스에서 재정의 할 수 있음
  • 후크를 사용하여 실행 조건을 서브클래스에서 재정의할 수 있음

 

2. CaffeineBeverage

public abstract class CaffeineBeverage {
    final void prepareRecipe() {
    	boilWater();
        brew();
        pourInCup();
        if (customerWantsCondiments()) addCondiments();
    }
    
    abstract void brew();
    abstract void addCondiments();
    
    void boilWater() { /* ... */ }
    void pourInCup() { /* ... */ }
    boolean customerWantsCondiments() { return true; }
}
public class Tea extends CaffeineBeverage {
    public void brew() { System.out.println("찻잎 우려내는 중"); }
    public void addCondiments() { System.out.println("레몬을 추가하는 중"); }
}

 

3. 예시

Arrays.sort() 

AbstractList

  • ArrayList, LinkedList의 추상클래스
  • subList()를 위해 get(), size()를 구현해야 함