어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴
- 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용
- 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현
- AbstractClass
템플릿 메서드를 정의하는 클래스
하위 클래스에 공통 알고리즘을 정의하고 하위 클래스에서 구현될 기능을 primitive 메서드 또는 hook 메서드로 정의하는 클래스 - ConcreteClass
물려받은 primitive 메서드 또는 hook 메서드를 구현하는 클래스
상위 클래스에 구현된 템플릿 메서드의 일반적인 알고리즘에서 하위 클래스에 적합하게 primitive 메서드나 hook 메서드를 오버라이드하는 클래스
1. 부모에서 공통은 구현하고 확장/변화가 필요한 메서드는 선언만 진행
public abstract class Game {
abstract void initialize();
abstract void startPlay();
abstract void endPlay();
//template method
public final void play(){
//initialize the game
initialize();
//start game
startPlay();
//end game
endPlay();
}
}
2. 자식에서 구현
public class Cricket extends Game{
@Override
void initialize() {
System.out.println("서킷 경기 준비");
}
@Override
void startPlay() {
System.out.println("서킷 경기 시작");
}
@Override
void endPlay() {
System.out.println("서킷 경기 종료");
}
}
public class Football extends Game{
@Override
void initialize() {
System.out.println("축구 경기 준비");
}
@Override
void startPlay() {
System.out.println("축구 경기 시작");
}
@Override
void endPlay() {
System.out.println("축구 경기 종료");
}
}
3. 사용 및 결과
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Cricket();
game.play();
System.out.println();
game = new Football();
game.play();
}
}
reference
https://www.tutorialspoint.com/design_pattern/template_pattern.htm
'Design Pattern > 행위 패턴' 카테고리의 다른 글
Strategy 전략 프로젝트에 적용 해보기 (0) | 2021.05.28 |
---|---|
State Pattern (0) | 2021.05.13 |
Command Pattern (0) | 2021.05.12 |
Strategy Pattern (0) | 2021.05.06 |