Template Method Pattern (템플릿 메소드 패턴)



효과


- 공통적인 프로세스를 묶어준다


- 알고리즘의 구조를 메소드에 정의하고 하위 클래스에서 알고리즘 구조의 변경없이 알고리즘을 재정의하는 패턴.



공통점


- 구현하려는 알고리즘이 일정한 프로세스가 있다.


- 구현하려는 알고리즘이 변경 가능성이 있다.



단계


1. 알고리즘을 여러 단계로 나눈다.


2. 나눠진 알고리즘의 단계를 메소드로 선언한다.


3. 알고리즘을 수행할 템플릿 메소드를 만든다.


4. 하위 클래스에서 나눠진 메소드들을 구현한다.


 

(원본 출처 : https://www.tutorialspoint.com/design_pattern/design_pattern_quick_guide.htm)

 

템플릿 패턴에서 추상 클래스는 정의 된 방법 (들) / 템플릿 (들)을 노출하여 메소드를 실행합니다. 그 서브 클래스는, 필요에 따라서 메서드의 구현을 오버라이드 (override) 할 수 있습니다 만, 호출은 abstract 클래스에 의해 정의 된 것과 같은 방법으로 실시 할 필요가 있습니다. 이 패턴은 행동 패턴 카테고리에 포함됩니다.

 

 

Implementation

 

재정의 할 수 없도록 final로 설정된 템플릿 메소드를 사용하여 작업을 정의하는 Game abstract 클래스를 만들 것입니다. 크리켓과 풋볼은 게임을 확장하고 그 메서드를 오버라이드하는 구체적인 클래스입니다.

TemplatePatternDemo, 데모 클래스는 게임을 사용하여 템플릿 패턴의 사용을 시연합니다.

Template Pattern UML Diagram

Step 1

final 인 템플릿 메서드로 추상 클래스를 만듭니다.

 

Game.java

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();
   }
}

Step 2

위의 클래스를 확장하는 구체적인 클래스를 만듭니다.

Cricket.java

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!");
   }
}

Football.java

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!");
   }
}

Step 3

게임의 정의 된 방법을 보여주기 위해 게임의 템플릿 메소드 play ()를 사용하십시오.

TemplatePatternDemo.java

public class TemplatePatternDemo {
   public static void main(String[] args) {

      Game game = new Cricket();
      game.play();
      System.out.println();
      game = new Football();
      game.play();		
   }
}

Step 4

결과를 확인합니다.

Cricket Game Initialized! Start playing.
Cricket Game Started. Enjoy the game!
Cricket Game Finished!

Football Game Initialized! Start playing.
Football Game Started. Enjoy the game!
Football Game Finished!
Posted by kunoo
,