애플리케이션에 서로 비슷한 프로시져가 있다면 상속을 통해 특정한 개별화된 단계를 재정의하는 게 좋다.
전략 패턴과 비슷하지만 템플릿 패턴은 상속(정적)을 이용하고, 전략패턴은 구성(동적)을 이용한다.
상속은 클래스 수준에서 정의되고, 구성은 객체 수준에서 정의됨
숫자를 정렬하는 방법 추상화해 템플릿 패턴을 사용해 다른 알고리즘을 동적으로 바뀌게 끔 구현했다.
public abstract class Algorithm {
protected int[] nums;
public Algorithm(int[] nums) {
this.nums = nums;
}
protected abstract void initialize();
protected abstract void sorting();
protected abstract void showResult();
protected void swap(int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
// template Pattern
public final void sort() {
initialize();
sorting();
showResult();
}
}
public class BubbleSort extends Algorithm {
public BubbleSort(int[] nums) {
super(nums);
}
@Override
protected void initialize() {
System.out.println("Initializing the bubble sort");
}
@Override
protected void sorting() {
Arrays.sort(this.nums);
}
@Override
protected void showResult() {
System.out.println(Arrays.toString(nums));
}
}
여기서 핵심은 sort() 메스드로 자손 클래스에서 재정의된 메서드를 사용하고 있다는 점이다.
(final로 재정의를 못하게끔 막음)