這種型別的設計模式屬於行為型模式。它定義乙個操作中演算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變演算法的結構,只是重定義該演算法的某些特定步驟。換句話說,模板模式會定義了演算法的固定執行邏輯,這個執行邏輯是有父類來控制的,同時將公用的方法邏輯放到父類中維護,而可能改變的方法延遲到子類中實現。
它封裝了不變部分,擴充套件可變部分。它把認為是不變部分的演算法封裝到父類中實現,而把可變部分演算法由子類繼承實現,便於子類繼續擴充套件。
它在父類中提取了公共的部分**,便於**復用。
部分方法是由子類實現的,因此子類可以通過擴充套件方式增加相應的功能,符合開閉原則。
對每個不同的實現都需要定義乙個子類,這會導致類的個數增加,系統更加龐大,設計也更加抽象。
父類中的抽象方法由子類實現,子類執行的結果會影響父類的結果,這導致一種反向的控制結構,它提高了**閱讀的難度。
1.多個子類有相同的邏輯
2.將公共的行為抽取出來放到乙個公共類中,子類通過繼承公共類來獲取公共方法的使用
3.多個子類中差異性的內容放到子類裡實現
抽象方法:在抽象類宣告、由其具體子類實現。
具體方法:在抽象類中宣告並實現,在具體子類中可以繼承或重寫。
鉤子方法:在抽象類中宣告並實現(可以是空的實現),子類視情況進行重寫覆蓋,一般是邏輯判斷方法。
模板方法:定義統一模板演算法的方法,提供實現方法,子類一般不需要重寫。
模板模式定義了乙個統一的演算法,子類可以對演算法的某一些步驟,進行覆蓋重寫,可以提高**的復用率。同過繼承的方式實現,依賴比較強,不夠靈活。
策略模式每個子類都是一種實現,可以完全不相同,即便演算法之間存在共性,也需要在每個子類重新實現,通過組合的方式實現,可以動態的改變演算法,比較靈活。
publicabstract
class
game
/*** 抽象方法
*/abstract
void
startplay();
abstract
void
endplay();
/*** 鉤子方法**
@return
是否需要結束
*/boolean
isneedend()
/*** 模板方法
* final修飾 不允許子類修改
* 每乙個遊戲先初始化、開始遊戲 是否需要結束遊戲 根據鉤子進行判斷
*/public
final
void
play()
}}
/*** 具體模板
* 足球遊戲 */
public
class football extends
game
@override
void
startplay()
@override
boolean
isneedend()
}
/*** 模板測試類 */
public
class
templatemodetest
}
模板設計模式 設計模式之模板模式
模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...
設計模式之模板設計模式
模板方法模式,定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重新定義該演算法的某些特定步驟。模板方法模式是通過把不變行為搬到超類,去除子類中的重複 來體現它的優勢。當不變和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重複...
設計模式之模板設計模式
在父類中定義好演算法的骨架,然後在子類中去實現。總的來說就是父類中定義需要實現的總方法,然後在子類中去依次實現它 當然根據物件的不同,所實現的具體細節不同。下面來看乙個例子 在父類中我們定義三個抽象的方法job 在子類中去實現它。子類中執行execute方法 job1 如果當前時間能整除2 則執行j...