模板方法模式(template)是行為模式之一,其就是簡單定義乙個演算法執行骨架,而將其具體的演算法延遲到子類中實現,從而使出現過多的類的時候不用再改變演算法和結構直接新增乙個實現子類就可以了。
一般在具體統一的操作步驟和業務功能,但是具有不同的細節處理,這樣用模板方法模式減少了**的復用
下面簡單的看看模板方法模式的原理圖:
例項物件對於抽象類的繼承,展開了具體的細節功能的處理,下面把模式應用到具體的例項:
簡單的對於我們每天吃飯的情況(我旁邊的各種情況),用乙個普通的人作為吃飯的抽象類,然後定義吃早飯午飯晚飯都吃什麼,通過不同的人對吃飯的要求也不一樣對了乙個小例子:
xhw分別是三種人,然後都有固定的一日三餐,但是吃的方式是不一樣的:
package com.designpattern.template;
public abstract class person
public abstract void breakfast();
public abstract void lunch();
public abstract void dinner();
}
這裡定義抽象類就是用來繼承的,同時裡面的eat是非抽象方法,這樣子類可以不繼承,直接實現父類指標指向子類,同時呼叫方法,但是對於早上中午晚上的方法,只必須要子類去繼承的,所以就抽象了一下:
package com.designpattern.template;
public class x extends person
@override
public void dinner()
@override
public void lunch()
}
package com.designpattern.template;
public class w extends person
@override
public void dinner()
@override
public void lunch()
}
package com.designpattern.template;
public class w extends person
@override
public void dinner()
@override
public void lunch()
}
然後在client端呼叫:
package com.designpattern.template;
public class client
}
輸入內容如下
h
早晨一般不吃飯,**
晚上去尚飲吃雲吞什錦
中午在外面買一點煎餅什麼的吃點
w早晨沒有時間吃早飯,於是就不吃了
晚上去食堂三樓吃乙個餅一盤菜一碗粥
中午去食堂二樓吃兩個饅頭乙個菜一碗粥
x早晨先吃兩個麥麵包片再喝一袋奶吃乙個雞蛋
晚上去食堂一樓吃餃子在來一碗蓋飯
中午去食堂三樓吃牛肉罩餅
這樣就簡單的實現了乙個模板模式;
使用模板方法模式,在定義演算法的骨架的同時,可以很靈活地實現具體的演算法,滿足使用者靈活多變的需求。
雖然使用模板方法模式可以很自由滴實現具體的演算法,但是如果演算法的骨架有改變的話,則需要重新修改抽象類。
設計模式(十四) 模板方法模式
模式中的角色 抽象類 abstractclass 定義了演算法的骨架。具體類 concreteclass 實現抽象類中的抽象方法,已完成完整的演算法。抽象模板類 public abstract class abstractperson 以下是不同子類根據自身特性完成的具體步驟 protected a...
python設計模式(十四) 模板方法模式
定義乙個演算法或者流程,部分環節設計為外部可變,用類似於模板的思想來例項化乙個實體,可以往模板中填充不同的內容 在模板思想下,實體的整體框架是確定的,他是乙個模板,但是模板下內容可變,從而實現了動態的更新流程或演算法。示例code encoding utf 8 實現乙個客戶點單後的處理流程流程 cl...
模板方法模式 java設計模式(二十四)
模板方法模式 template method pattern 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義演算法的某些特定步驟。鉤子方法分為兩種。模板方法結構。缺點 適用範圍 private final class worker extends ...