模版方法模式:定義一下操作中的演算法骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
模版方法模式結構圖
abstractclass是抽象類,其實也就是一抽象模版,定義並實現了乙個模版方法。這個模版方法一般是乙個具體方法,它給出了乙個頂級邏輯的骨架,而邏輯的組成步驟在相應的抽象類操作中,推遲到子類實現。
concreteclass,實現父類所定義的乙個或多個抽象方法。每個abstractclass都可以有任意多個concreteclass與之對應,而每個concreteclass都可以給出這些抽象方法的不同實現,從而使得頂層邏輯的實現各不相同。
具體場景:
一次考試,所有學生拿到的試卷都是一樣的,不同的只是各個學生對試題所做出的不同答案。因此這裡的試卷可以看成是乙個抽象類,其定義了所有試題以及預留乙個抽象方法,來給每個試題做出答案。具體**如下
public
abstract
class test*****
public
void
question2()
public
void
question3()
}
而所有的實現類,只用實現test*****類中定義的抽象方法即可,這樣就可以實現不同學生對試題做出自己的答案。具體**如下:
public
class
test*****a
extends
test*****
@override
public string answer2()
@override
public string answer3()
}
測試**如下:
public
class test
}
輸出結果:
模版方法的特點:
當不變的和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重複出現。我們通過模版方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重複的不變行為的糾纏。
模版方法模式就是通過把不變的行為搬到超類,去除子類中的重複**。可以提高**的復用性,降低**的維護成本。
設計模式 模版方法模式
模版方法模式說明 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。模版方法模式就是提供了乙個很好的 復用平台,是通過把不變行為搬移到超類,去除子類的重複 來體現它的優勢。下面直接看此模式的簡單模版 抽象模版,定義並實...
設計模式 模版方法模式
模版方法模式 在乙個方法中定義乙個演算法的骨架,而將一些步驟延遲到子類中。模版方法使得子類可以在不改變演算法結構的情況下,重新定義演算法中的某些步驟。對模版方法進行掛鉤 鉤子是一種被宣告在抽象類中的方法,但只有空的或者預設的實現。鉤子的存在,可以讓子類有能力對演算法的不同點進行掛鉤。要不要掛鉤,由子...
設計模式 模版方法
設計模式 模版方法 場景小張的團隊最近接受乙個需求,實現實現一家咖啡店的沖泡咖啡和茶的沖泡自動化。之前這家咖啡店都是由咖啡師傅手動進行調製咖啡和茶。現在咖啡店需要引入自動化的點單和調製飲料的系統,小張負責實現調製飲料的功能。咖啡師傅手工沖泡咖啡和茶的流程 沖泡咖啡 把水煮沸 用沸水沖泡咖啡 把咖啡倒...