1.模板模式就是通過抽象類來定義乙個邏輯模板,邏輯框架、邏輯原型,然後將無法決定的部分抽象成抽象類交由子類來實現,一般這些抽象類的呼叫邏輯還是在抽象類中完成的。這麼看來,模板就是定義乙個框架
2.定義模板採用抽象類來定義,為什麼不是介面呢?因為公共的結構化邏輯需要在抽象類中完成,只將非公共的部分邏輯抽象成抽象方法,留待子類充實實現。
example : 建造房子為例
共有的行為:1.安裝門 2.安裝窗戶
共有的邏輯:建房子(需要 1.安裝門 2.安裝窗戶)
模板抽象類:housetemplate
public
abstract
class
housetemplate
protected string name;
protected
abstract
void
builddoor()
;protected
abstract
void
buildwindow()
;//公共邏輯
public
final
void
buildhouse()
}
子類1:houseone:
public
class
houseone
extends
housetemplate
@override
protected
void
builddoor()
@override
protected
void
buildwindow()
}
子類2:housetwo:
public
class
housetwo
extends
housetemplate
@override
protected
void
builddoor()
@override
protected
void
buildwindow()
}
模擬呼叫
public
class
clienter
}
二 鉤子
1.其實,模板模式中還有乙個鉤子方法的概念
2.鉤子幹啥的呢?鉤子就是給子類乙個授權,允許子類通過重寫鉤子方法來顛覆基本邏輯的執行,這有時候是非常有用的。就比如在蓋房子的時候,有乙個需要子類來決定是否建造廁所間的需求時,可以這麼實現:
模板抽象類:housetemplate
public
abstract
class
housetemplate
protected string name;
protected
abstract
void
builddoor()
;protected
abstract
void
buildwindow()
;//建廁所方法
protected
abstract
void
buildtoilet()
;//鉤子方法 是否建廁所
protected
boolean
isbuildtoilet()
//公共邏輯
public
final
void
buildhouse()
}}
子類1:houseone
public
class
houseone
extends
housetemplate
houseone
(string name,
boolean isbuildtoilet)
public
boolean isbuildtoilet;
@override
protected
void
builddoor()
@override
protected
void
buildwindow()
@override
protected
void
buildtoilet()
@override
protected
boolean
isbuildtoilet()
}
模板模式的關鍵點:
使用抽象類定義模板類,並在其中定義所有的基本方法、模板方法,鉤子方法,不限數量,以實現功能邏輯為主。其中基本方法使用final修飾,其中要呼叫基本方法和鉤子方法,基本方法和鉤子方法可以使用protected修飾,表明可被子類修改。
定義實現抽象類的子類,重寫其中的模板方法,甚至鉤子方法,完善具體的邏輯。
使用場景:
在多個子類中擁有相同的方法,而且邏輯相同時,可以將這些方法抽出來放到乙個模板抽象類中。
程式主框架相同,細節不同的情況下,也可以使用模板方法。
模板設計模式 設計模式之模板模式
模板模式,通常又叫做模板方法模式,乙個抽象類公開定義了執行方法的模板,它的子類可以按需要重寫方法實現,但呼叫將以抽象類中定義的方法進行,這種型別的設計模式屬於行為型模式。模板模式主要解決將通用的演算法抽象起來,同樣的 邏輯出現了重複,就可以使用模板模式進行重構。關鍵 在抽象類實現,其他步驟在子類實現...
設計模式之模板設計模式
模板方法模式,定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重新定義該演算法的某些特定步驟。模板方法模式是通過把不變行為搬到超類,去除子類中的重複 來體現它的優勢。當不變和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重複...
設計模式之模板設計模式
在父類中定義好演算法的骨架,然後在子類中去實現。總的來說就是父類中定義需要實現的總方法,然後在子類中去依次實現它 當然根據物件的不同,所實現的具體細節不同。下面來看乙個例子 在父類中我們定義三個抽象的方法job 在子類中去實現它。子類中執行execute方法 job1 如果當前時間能整除2 則執行j...