版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-模板方法模式

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

模板方法模式定義了一個算法的步驟,并允許子類別為一個或多個步驟提供其實踐方式。讓子類別在不改變算法架構(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é)