티스토리 뷰
Template Method 패턴 이란?
- 상위 클래스에서 알고리즘의 뼈대를 결정하고, 하위 클래스에서 구체적인 알고리즘을 구현하는 pattern
- 상위클래스의 templateMethod() 에서 operation1(), operation2() 를 각각 호출 하며 흐름의 뼈대를 구성하고 있다.
- operation1(), operation2() 를 추상메쏘드로서 하위 클래스에서 구현한다.
예제
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();
}
}
public class Cricket extends Game {
@Override
void endPlay() {
System.out.println("Cricket Game Finished!");
}
@Override
void initialize() {
System.out.println("Cricket Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Cricket Game Started. Enjoy the game!");
}
}
public class Football extends Game {
@Override
void endPlay() {
System.out.println("Football Game Finished!");
}
@Override
void initialize() {
System.out.println("Football Game Initialized! Start playing.");
}
@Override
void startPlay() {
System.out.println("Football Game Started. Enjoy the game!");
}
}
public class TemplatePatternDemo {
public static void main(String[] args) {
Game game = new Cricket();
game.play();
// Cricket Game Initialized! Start playing.
//Cricket Game Started. Enjoy the game!
//Cricket Game Finished!
game = new Football();
game.play();
// Football Game Initialized! Start playing.
// Football Game Started. Enjoy the game!
// Football Game Finished!
}
}
결론
장점
- 로직을 공통화 할 수 있다.
- 공통으로 사용할 수 있는 logic을 부모 클래스에 둠으로써 code의 중복이 없어지고 유지보수에 용이.
주의사항
- template method에 기술 된 알고리즘 변경 시, 모든 자식 class가 영향 받는다.
- template method의 알고리즘은 최대한 공통적인 부분만 담아내도록 설계 해야 함.
- 하위 클래스 작성 시, 구현 할 추상메서드의 호출 시점을 알고 있어야 한다.
- 하위 클래스에 구현 할 메소드가 어떠한 타이밍에 호출 될지는 상위클래스에 정의 되어 있으므로 호출 시점을 정확히 이해하고 하위클래스를 구현해야 오동작이 없음.
'Programing > DesignPattern' 카테고리의 다른 글
GOF 디자인 패턴 (0) | 2016.10.04 |
---|---|
State 패턴 (0) | 2016.09.01 |
Composite 패턴 (0) | 2016.08.24 |
Singleton 패턴 (0) | 2016.08.24 |
Mediator 패턴 (0) | 2016.08.22 |
댓글