http://dev.yesky.com/325/2061825.shtml
http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95
四、適用情況
根據上面對定義的分析,以及例子的說明,可以看出模板方法適用于以下情況:
1) 一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現。
2) 各子類中公共的行為應被提取出來并集中到一個公共父類中以避免代碼重復。其實這可以說是一種好的編碼習慣了。
3) 控制子類擴展。模板方法只在特定點調用操作,這樣就只允許在這些點進行擴展。比如上面runBare()方法就只在runTest前面適用setUp方法。如果你不愿子類來修改你的模板方法定義的框架,你可以采用兩種方式來做:一是在API中不體現出你的模板方法;二、將你的模板方法置為final就可以了。
可以看出,使用模板方法模式可以將代碼的公共行為提取出來,達到復用的目的。而且,在模板方法模式中,是由父類的模板方法來控制子類中的具體實現。這樣你在實現子類的時候,根本不需要對業務流程有太多的了解。
-----------------------------
模板方法模式定義了一個算法的步驟,并允許次類別為一個或多個步驟提供其實踐方式。讓次類別在不改變算法架構的情況下,重新定義算法中的某些步驟。在軟件工程中,它是一種軟件設計模式,和C++模板沒有關連。
[編輯] 用法
模板方法模式多用在:
某些類別的算法中,實做了相同的方法,造成程式碼的重復。
控制次類別必須遵守的一些事項。
...
[編輯] 用例(Java)
http://zh.wikipedia.org/wiki/%E6%A8%A1%E6%9D%BF%E6%96%B9%E6%B3%95

四、適用情況
根據上面對定義的分析,以及例子的說明,可以看出模板方法適用于以下情況:
1) 一次性實現一個算法的不變的部分,并將可變的行為留給子類來實現。
2) 各子類中公共的行為應被提取出來并集中到一個公共父類中以避免代碼重復。其實這可以說是一種好的編碼習慣了。
3) 控制子類擴展。模板方法只在特定點調用操作,這樣就只允許在這些點進行擴展。比如上面runBare()方法就只在runTest前面適用setUp方法。如果你不愿子類來修改你的模板方法定義的框架,你可以采用兩種方式來做:一是在API中不體現出你的模板方法;二、將你的模板方法置為final就可以了。
可以看出,使用模板方法模式可以將代碼的公共行為提取出來,達到復用的目的。而且,在模板方法模式中,是由父類的模板方法來控制子類中的具體實現。這樣你在實現子類的時候,根本不需要對業務流程有太多的了解。
-----------------------------
模板方法模式定義了一個算法的步驟,并允許次類別為一個或多個步驟提供其實踐方式。讓次類別在不改變算法架構的情況下,重新定義算法中的某些步驟。在軟件工程中,它是一種軟件設計模式,和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. */ // ... }
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
