概述
模板方法模式是類的行為模式。準備乙個抽象類,將部分邏輯以具體方法以及具體建構函式的形式實現,然後宣告一些抽象方法來迫使子類實現剩餘的邏輯。不同的子類可以以不同的方式實現這些抽象方法,從而對剩餘的邏輯有不同的實現。這就是模板方法模式的用意。
比如定義乙個操作中的演算法的骨架,將步驟延遲到子類中。模板方法使得子類能夠不去改變乙個演算法的結構即可重定義演算法的某些特定步驟。
模式中的角色
抽象類(abstractclass):實現了模板方法,定義了演算法的骨架。
具體類(concreteclass):實現抽象類中的抽象方法,已完成完整的演算法。
應用
舉個例子,以準備去學校所要做的工作(preparegotoschool)為例,假設需要分三步:穿衣服(dressup),吃早飯(eatbreakfast),帶上東西(takethings)。學生和老師要做得具體事情肯定有所區別。
抽象類abstractclass
public
abstract
class abstractperson
//以下是不同子類根據自身特性完成的具體步驟
protected
abstract
void
dressup();
protected
abstract
void
eatbreakfast();
protected
abstract
void
takethings();
}
具體類concreteclass
public
class
student
extends
abstractperson
@override
protected
void
eatbreakfast()
@override
protected
void
takethings()
}
public
class
teacher
extends
abstractperson
@override
protected
void
eatbreakfast()
@override
protected
void
takethings()
}
public
class client
}
優點
模板方法模式通過把不變的行為搬移到超類,去除了子類中的重複**。子類實現演算法的某些細節,有助於演算法的擴充套件。
通過乙個父類呼叫子類實現的操作,通過子類擴充套件增加新的行為,符合「開放-封閉原則」。
缺點
每個不同的實現都需要定義乙個子類,這會導致類的個數的增加,設計更加抽象。
適用場景
在某些類的演算法中,用了相同的方法,造成**的重複。
控制子類擴充套件,子類必須遵守演算法規則。
模板設計模式 PHP設計模式之模板方法模式
模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...
設計模式之模板方法設計模式
父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...
設計模式之模板方法模式
定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...