publicabstractclassCaffeineBeverage{ // sub class에서 상속받아 overriding 불가능하도록 final로 선언 // 일련의 절차들을 정의해두고 ,sub class마다 다양한 행위를 하는 부분은 추상화 method로 선언 finalvoidprepareRecipe(){ boilWater(); brew(); pourInCup(); addCondiments(); } privatevoidboilWater(){ System.out.println(" boiling water " ); } privatevoidpourInCup(){ System.out.println(" pour in cup ~ " ); } // abstractprotectedvoidbrew(); abstractprotectedvoidaddCondiments(); }
알고리즘을 super class에서 수행될 순서를 정의해두고, tea , coffee 는 각 수행될 단계를 구체화 한다. 이를 IoC를 이용한 디자인 패턴이라고도 한다 (reference - toby’s spring 3.1 ) 제어의 흐름을 tea,coffe가 가져가는게 아닌 beverage superclass가 제어의 흐름을 가져가기 때문이다.
어쨌거나 위 코드의 장점은 중복코드가 제거되었고, 확장이 용이하다.
마지막으로, 책에서 정의하는 template method pattern을 인용하면 다음과 같다.
template method pattern에서는 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 subClass에서 구현할 수 있습니다.
이를 이용하면 알고리즘의 구조는 그대로 유지하면서 subclass에서 특정단계를 overriding할 수 있습니다.