Template Method Pattern
Template Method Pattern은 알고리즘의 뼈대만을 정의 하고 각 단계에서 수행할 구체적인 처리는 SubClass 쪽으로 미룹니다. 알고리즘의 구조 자체는 그대로 놔둔 채 알고리즘 각 단계 처리를 SubClass에서 재정의할 수 있게 합니다.
활용
- 어떤 한 알고리즘을 이루는 부분 중 변하지 않는 부분을 한 번 정의해 놓고 다양해질 수 있는 부분은 SubClass에서 정의할 수 있도록 남겨두고자 할 때
- SubClass 사이의 공통적인 행동을 추출하여 하나의 공통 클래스에 몰아둠으로써 코드 중복을 피하고 싶을 때
- SubClass의 확장을 제어할 수 있습니다. Template Method가 어떤 특정한 시점에 hook연산을 호출하도록 정의함으로써, 그 특정 시점에서만 확장되도록 합니다
Example
- ClubBuilder : 알고리즘의 뼈대를 정의하는 Template Method를 정의합니다. 또한 SubClass들이 재정의 해야할 연산을 정의 합니다.
- SoccerClub, BasketBallClub : SubClass로써 각각 다른 알고리즘 처리 단계를 수행하기 위한 기본연산을 구현합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
| public abstract class ClubBuilder {
// Template Method
public final void buildClub(){
System.out.println("Common Logic.......");
addClub();
addMemberToClub();
}
public abstract void addMemberToClub();
public abstract void addClub();
}
|
1
2
3
4
5
6
7
8
9
10
11
| public class SoccerClub extends ClubBuilder{
@Override
public void addMemberToClub() {
System.out.println("Add John to Soccer Club");
}
@Override
public void addClub() {
System.out.println("Add Soccer Club!");
}
}
|
1
2
3
4
5
6
7
8
9
10
11
| public class BaskballClub extends ClubBuilder{
@Override
public void addMemberToClub() {
System.out.println("Add Jack to Basketball Club");
}
@Override
public void addClub() {
System.out.println("Add Basketball Club");
}
}
|
Template Method를 final로 선언한 것은 Overriding되는 것을 방지하기 위함 입니다.
출력 결과
1
2
3
4
5
6
7
8
9
| public static void main(String[] args) {
SoccerClub soccerClub = new SoccerClub();
soccerClub.buildClub();
System.out.println("-------------------------");
BaskballClub baskballClub = new BaskballClub();
baskballClub.buildClub();
}
|
1
2
3
4
5
6
7
| Common Logic.......
Add Soccer Club!
Add John to Soccer Club
-------------------------
Common Logic.......
Add Basketball Club
Add Jack to Basketball Club
|
관련된 글
Reference