티스토리 뷰

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
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함