Template Method: diferència entre les revisions

Contingut suprimit Contingut afegit
Cap resum de modificació
(Cap diferència)

Revisió del 20:51, 20 nov 2014

El patró de disseny Template Method ens permet definir l'esquelet del programa, que més tard podrà ser redefinit parcialment o totalment en les classes inferiors.

Example

/**
 * 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.
 */

public abstract class Joc{

    protected int torn;
    abstract void inicialitzarJoc();
    abstract void ferJugada(int player);
    abstract boolean fiJoc();
    abstract void mostrarGuanyador();

    /* A template method */
    public final void jugar(int torn) {
        this.torn = torn;
        inicialitzarJoc();
        int j = 0;
        while (!fiJoc()) {
            ferJugada(j);
            j = (j + 1) % torn;
        }
        mostrarGuanyador();
    }
}

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

public class Monopoli extends Joc {

    /* Implementation of necessary concrete methods */
    public void inicialitzarJoc() {
        // Inicialitzar jugadors
        // Inicialitzar diners inicials
    }
    public void ferJugada(int jugador) {
        // Fer una tirada
    }
    public boolean fiJoc() {
        // Retorna true si el joc a finalitzat
        // segons les regles del Monopoliu
    }
    public int intGuanyador() {
        // Mostra qui guanya

    }
    /* Altres funcions del joc. */

    // ...
}

public class Escacs extends Joc {

    /* Implementation of necessary concrete methods */
    public void inicialitzarJoc() {
        // Initialize players
        // Put the pieces on the board
    }
    public void ferJugada(int player) {
        // Process a turn for the player
    }
    public boolean fiJoc() {
        // Return true if in Checkmate or 
        // Stalemate has been reached
    }
    public void mostrarGuanyador() {
        // Mostrar el guanyador
    }
    /* Altres funcions del joc. */

    // ...
}

Referències