수색…


자바에서 템플릿 메서드 구현

템플릿 메소드 패턴은 연산에서 알고리즘의 프로그램 스켈레톤을 정의하고 일부 단계를 서브 클래스로 지연시키는 비헤이비어 디자인 패턴입니다.

구조:

여기에 이미지 설명을 입력하십시오.

주요 메모 :

  1. 템플릿 메서드는 상속을 사용합니다.
  2. 기본 클래스에 의해 구현 된 Template 메서드는 재정의되어서는 안됩니다. 이 방식으로 알고리즘의 구조는 수퍼 클래스에 의해 제어되고 세부 사항은 서브 클래스에서 구현됩니다

코드 예 :

import java.util.List;

class GameRule{

}
class GameInfo{
    String gameName;
    List<String> players;
    List<GameRule> rules;
}    

abstract class Game{
    protected GameInfo info;
    public Game(GameInfo info){
        this.info = info;
    }
    public abstract void createGame();
    public abstract void makeMoves();
    public abstract void applyRules();
    
    /* playGame is template method. This algorithm skeleton can't be changed by sub-classes. sub-class can change
       the behaviour only of steps like createGame() etc. */
       
    public void playGame(){
        createGame();
        makeMoves();
        applyRules();
        closeGame();
    }
    protected void closeGame(){
        System.out.println("Close game:"+this.getClass().getName());
        System.out.println("--------------------");
    }
}
class Chess extends Game{
    public Chess(GameInfo info){
        super(info);
    }
    public void createGame(){
        // Use GameInfo and create Game
        System.out.println("Creating Chess game");
    }
    public void makeMoves(){
        System.out.println("Make Chess moves");
    }
    public void applyRules(){
        System.out.println("Apply Chess rules");
    }
}
class Checkers extends Game{
    public Checkers(GameInfo info){
        super(info);
    }
    public void createGame(){
        // Use GameInfo and create Game
        System.out.println("Creating Checkers game");
    }
    public void makeMoves(){
        System.out.println("Make Checkers moves");
    }
    public void applyRules(){
        System.out.println("Apply Checkers rules");
    }
    
}
class Ludo extends Game{
    public Ludo(GameInfo info){
        super(info);
    }
    public void createGame(){
        // Use GameInfo and create Game
        System.out.println("Creating Ludo game");
    }
    public void makeMoves(){
        System.out.println("Make Ludo moves");
    }
    public void applyRules(){
        System.out.println("Apply Ludo rules");
    }
}

public class TemplateMethodPattern{
    public static void main(String args[]){
        System.out.println("--------------------");
    
        Game game = new Chess(new GameInfo());
        game.playGame();
        
        game = new Ludo(new GameInfo());
        game.playGame();
        
        game = new Checkers(new GameInfo());
        game.playGame();
    }
}

설명:

  1. Game 은 템플릿 메서드를 정의하는 abstract 수퍼 클래스입니다. playGame()

  2. playGame() 스켈레톤은 기본 클래스에서 정의됩니다. Game

  3. Chess, LudoCheckers 와 같은 하위 클래스는 playGame() 의 뼈대를 변경할 수 없습니다. 그러나 그들은 다음과 같은 일부 단계의 행동을 수정할 수 있습니다.

    createGame();
    makeMoves();
    applyRules();
    

산출:

--------------------
Creating Chess game
Make Chess moves
Apply Chess rules
Close game:Chess
--------------------
Creating Ludo game
Make Ludo moves
Apply Ludo rules
Close game:Ludo
--------------------
Creating Checkers game
Make Checkers moves
Apply Checkers rules
Close game:Checkers
--------------------


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow