模板方法模式定義了一個算法的步驟,并允許子類別為一個或多個步驟提供其實踐方式。讓子類別在不改變算法架構(gòu)的情況下,重新定義算法中的某些步驟。在軟件工程中,它是一種軟件設(shè)計模式,和C++模板沒有關(guān)連。
簡介模板方法模式定義了一個算法的步驟,并允許子類別為一個或多個步驟提供其實踐方式。讓子類別在不改變算法架構(gòu)的情況下,重新定義算法中的某些步驟。在軟件工程中,它是一種軟件設(shè)計模式,和C++模板沒有關(guān)連。1
用法模板方法模式多用在:
某些類別的算法中,實做了相同的方法,造成程式碼的重復(fù)。
控制子類別必須遵守的一些事項。
...1
用例(Java) 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 } }本詞條內(nèi)容貢獻者為:
李嘉騫 - 博士 - 同濟大學(xué)