Design patterns
Méthode du modèle
Recherche…
Implémentation de la méthode de modèle en Java
Le modèle de méthode de modèle est un modèle de conception comportementale qui définit le squelette de programme d'un algorithme dans une opération, en reportant certaines étapes à des sous-classes.
Structure:
Notes clés:
- La méthode du modèle utilise l'héritage
- La méthode Template implémentée par la classe de base ne doit pas être remplacée. De cette façon, la structure de l’algorithme est contrôlée par la super-classe et les détails sont implémentés dans les sous-classes.
Exemple de code:
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();
}
}
Explication:
Game
est une super classeabstract
, qui définit une méthode de template:playGame()
Le squelette de
playGame()
est défini dans la classe de base:Game
Les sous-classes telles que
Chess, Ludo
etCheckers
ne peuvent pas changer le squelette deplayGame()
. Mais ils peuvent modifier le comportement de certaines étapes commecreateGame(); makeMoves(); applyRules();
sortie:
--------------------
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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow