Template method pattern

This is an old revision of this page, as edited by 84.58.125.100 (talk) at 20:40, 24 May 2005 (Removal of previous example (see Discussion)). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

In software engineering, the template method pattern is a design pattern.

A template method defines the skeleton of an algorithm in terms of abstract operations which subclasses override to provide concrete behaviour.

Example in Java

/**
 * An abstract class that is common to several games in
 * which players play against the others, but only one is
 * playing at a given time.
 */

abstract class Game{

  private int playersCount;

  abstract void initializeGame();

  abstract void makePlay(int player);

  abstract boolean endOfGame();

  abstract void printWinner();

  /* A template method : */
  final void playOneGame(int playersCount){
    this.playersCount = playersCount;
    initializeGame();
    int j = 0;
    while( ! endOfGame() ){
      makePlay( j );
      j = (j + 1) % playersCount;
    }
    printWinner();
  }
}

Now we can extend this class in order to implement existing games:

class Monopoly extends Game{

  /* Implementation of necessary concrete méthodes */

  void initializeGame(){
    // ...
  }

  void makePlay(int player){
    // ...
  }

  boolean endOfGame(){
    // ...
  }

  void printWinner(){
    // ...
  }
 
  /* Specific declarations for the Monopoly game. */

  // ...

}
class Chess extends Game{

  /* Implementation of necessary concrete méthodes */

  void initializeGame(){
    // ...
  }

  void makePlay(int player){
    // ...
  }

  boolean endOfGame(){
    // ...
  }

  void printWinner(){
    // ...
  }
 
  /* Specific declarations for the Chess game. */

  // ...

}