Design patterns
템플릿 방법
수색…
자바에서 템플릿 메서드 구현
템플릿 메소드 패턴은 연산에서 알고리즘의 프로그램 스켈레톤을 정의하고 일부 단계를 서브 클래스로 지연시키는 비헤이비어 디자인 패턴입니다.
구조:
주요 메모 :
- 템플릿 메서드는 상속을 사용합니다.
- 기본 클래스에 의해 구현 된 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();
}
}
설명:
Game
은 템플릿 메서드를 정의하는abstract
수퍼 클래스입니다.playGame()
playGame()
스켈레톤은 기본 클래스에서 정의됩니다.Game
Chess, Ludo
및Checkers
와 같은 하위 클래스는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