추상 클래스로 선언된 상위 클래스에서 추상 메서드를 이용하여 전체 구현의 흐름을 정의하고 구체적인 각 메서드 구현은 하위 클래스에 위임한다. 하위 클래스가 다른 구현을 했지만, 템플릿 메서드에 정의된 시나리오 대로 수행된다. 전체적인 흐름을 통일 시키지만 상속받은 클래스로 하여금 어느정도 유연성을 주도록하는 디자인 패턴이다.
(템플릿 메서드: 추상 메서드나 구현된 메서드를 활용하여 전체의 흐름(시나리오)을 정의해놓은 메서드, final로 선언하여 하위 클래스에서 재정의할 수 없게함)
public abstract class Coffee {
final void makeCoffee() {
boilWater();
putEspresso();
putIce();
putAddMaterial();
}
abstract void putAddMaterial();
private void boilWater() { System.out.println("물을 끓인다."); }
private void putEspresso() { System.out.println("에스프레소를 넣는다."); }
private void putIce() { System.out.println("얼음을 넣는다."); }
}