Design Pattern/행위 패턴

Template Method Pattern

어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴

- 전체적으로는 동일하면서 부분적으로는 다른 구문으로 구성된 메서드의 코드 중복을 최소화 할 때 유용
- 동일한 기능을 상위 클래스에서 정의하면서 확장/변화가 필요한 부분만 서브 클래스에서 구현

  • 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