模板方法
维基百科,自由的百科全书
模板方法模式:UML類圖
模板方法模式定義了一個演算法的步驟,並允許次類別為一個或多個步驟提供其實踐方式。讓次類別在不改變演算法架構的情況下,重新定義演算法中的某些步驟。在軟件工程中,它是一種軟件設計模式,和C++模板没有關連。
用法 [编辑]
模板方法模式多用在:
- 某些類別的演算法中,實做了相同的方法,造成程式碼的重複。
- 控制子類別必須遵守的一些事項。
- ...
用例(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 actual games: class Monopoly extends Game { /* Implementation of necessary concrete methods */ void initializeGame() { // ... } void makePlay(int player) { // ... } boolean endOfGame() { // ... } void printWinner() { // ... } /* Specific declarations for the Monopoly game. */ // ... } class Chess extends Game { /* Implementation of necessary concrete methods */ void initializeGame() { // ... } void makePlay(int player) { // ... } boolean endOfGame() { // ... } void printWinner() { // ... } /* Specific declarations for the chess game. */ // ... }
public class Player {
public static void main(String[] args) {
Game chessGame = new Chess();
chessGame.initializeGame();
chessGame.playOneGame(1); //call template method
}
}