模板方法模式應用場景
模板方法模式優點
模板方法模式缺點
設計模式
飛機票三大工廠模式
登機入口
策略模式
登機入口
委派模式
登機入口
模板方法模式
登機入口
觀察者模式
登機入口
單例模式
登機入口
原型模式
登機入口
**模式
登機入口
裝飾者模式
登機入口
介面卡模式
登機入口
建造者模式
登機入口
責任鏈模式
登機入口
享元模式
登機入口
組合模式
登機入口
門面模式
登機入口
橋接模式
登機入口
中介者模式
登機入口
迭代器模式
登機入口
狀態模式
登機入口
直譯器模式
登機入口
備忘錄模式
登機入口
命令模式
登機入口
訪問者模式
登機入口
軟體設計7大原則和設計模式總結
登機入口
模板方法模式(template method pattern)是指定義乙個演算法的骨架,並允許子類為乙個或者多個步驟提供實現。模板方法使得子類可以在不改變演算法結構的情況下,重新定義演算法的某些步驟,屬於行為行設計模式。
舉個簡單的炒蔬菜的例子,我們把炒菜拆分為以下幾個步驟:
放油放入蔬菜
翻炒放鹽
放點其他佐料出鍋
接下來我們就以這個例子來寫乙個模板方法模式的示例
package
com.zwx.design.pattern.templete
;public
abstract
class
cookin**egetables
//6.起鍋
this
.dishup()
;}//放油
final
void
putoil()
//放入蔬菜
final
void
putvegetables()
//翻炒
final
void
stirfry()
//放點鹽
final
void
putsalt()
//放入其他佐料
abstract
void
putseasoning()
;//是否需要佐料,這個是鉤子方法,用於流程微調
protected
boolean
needseasoning()
//起鍋
final
void
dishup()
}
上面這個類中每個步驟都定義了乙個方法,但是否是final型別,不允許被繼承修改,只有乙個步驟:【加入佐料】是抽象的,需要子類去自定義實現,還有乙個特別的方法:needseasoning(),這是乙個鉤子方法,那麼什麼是鉤子方法呢?
鉤子方法的主要目的是用來干預執行流程,使得我們控制行為流程更加靈活,更符合實際業 務的需求。鉤子方法的返回值一般為適合條件分支語句的返回值(如 boolean、int 等),鉤子方法不是必須的,可以根據實際業務場景確認是否需要
package
com.zwx.design.pattern.templete
;public
class
cookingcabbage
extends
cookin**egetables
}
這個類主要就是實現抽象類中的抽象方法,去自定義實現某乙個步驟
模板方法模式相對來說是乙個比較簡單的設計模式,通過這樣乙個簡單的案例,相信大家對模板方法模式會有乙個基本的印象
一次性實現乙個演算法的不變的部分,並將可變的行為留給子類來實現。
各子類中公共的行為被提取出來並集中到乙個公共的父類中,從而避免**重複。
利用模板方法將相同處理邏輯的**放到抽象父類中,可以提高**的復用性。
將不同的**不同的子類中,通過對子類的擴充套件增加新的行為,提高**的擴充套件性。
把不變的行為寫在父類上,去除子類的重複**,提供了乙個很好的**復用平台, 符合開閉原則。
類數目的增加,每乙個抽象類都需要乙個子類來實現,這樣導致類的個數增加。
類數量的增加,間接地增加了系統實現的複雜度。
繼承關係自身缺點,如果父類新增新的抽象方法,所有子類都要改一遍。
模板方法模式 設計模式系列
模板方法模式 定義乙個操作中的演算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定的步驟。定義有些呆板,說說我的理解吧。父類定義實施的步驟,子類中實現具體的演算法。當我們要完成在某一細節層次一直得乙個過程或一系列步驟,但其個別步驟在更詳細的層...
設計模式(4) 模板方法模式
模板方法模式 定義 定義乙個操作中的演算法框架,而將一些步驟延遲到子類中。使得子類能夠不改變乙個演算法的結構就可以重定義該演算法的某些特定步驟。模板方法模式很easy,只使用了j a的繼承機制,但它是乙個應用很廣泛的模式。在軟體開發project中,假設同樣一段 複製過兩次,就須要對設計產生懷疑。架...
Android設計模式系列 模板方法模式
2013 11 26 17 15 佚名 字型大小 t t 我個人對模板方法的經典思想特別推崇,雖然模板方法在大對數情況下並不被推薦使用,但是這種通過父類呼叫子類的方法,使用繼承來改變演算法的一部分,是物件導向的一種基本認識。模板方法,和單例模式是我認為gof的23中最簡單的兩種模式。但是我個人對模板...