template method pattern에서는 메소드에서 알고리즘의 골격을 정의합니다. 알고리즘의 여러 단계 중 일부는 서브클래스에서 구현할 수 있습니다. 템플릿 메소드를 이용하면 알고리즘의 구조는 그대로 유지하면서 서브클래스에서 특정 단계를 재정의할 수 있습니다.
즉 상위 클래스에서 처리의 흐름을 정하고 하위 클래스에서 구체적인 내용을 결정하는 디자인 패턴입니다.
예제)
public abstract class AWorker {
protected final void work() {
attendance();
doIt();
leave();
}
private void attendance() {
System.out.println("출근하다.");
}
private void leave() {
System.out.println("퇴근하다.");
}
abstract void doIt();
--------------------------------------------------------------
public class Designer extends AWorker {
void doIt() {
System.out.println("디자인 작업함");
}
--------------------------------------------------------------
public class Programmer extends AWorker {
void doIt() {
System.out.println("프로그램 작업함");
}
--------------------------------------------------------------
public class Client {
public static void main(String[] args) {
AWorker worker = null;
worker = new Designer();
worker.work();
worker = new Programmer();
worker.work();
}
--------------------------------------------------------------
출근하다.
디자인 작업함
퇴근하다.
출근하다.
프로그램 작업함
퇴근하다.