設計模式-模板方法模式

模板設計模式

定義

模板設計模式就是在一個方法中定義一個算法的骨架, 而將一些步驟延遲到子類中. 這個方法叫作模板方法. 模板方法使得子類能夠在不改變算法結構的狀況下, 從新定義算法中的某些步驟.java

對於模板設計模式,最重要的就是要理解模板方法, 模板方法將算法定義成一組步驟, 其中任何步驟均可以是抽象的, 由子類負責實現. 這樣可以保證算法結構保持不變, 同時由子類提供部分實現.算法

詳細描述

類圖以下:設計模式

模板方法設計模式類圖

其中templateMethod()就是模板方法, 而在模板方法中會使用primitiveOperation1()和primitiveOperation2()兩個方法. 這兩個方法會在不一樣的子類中有不一樣的實現. 具體代碼以下:框架

abstract class AbstractClass {
	// 模板方法定義爲final, 防止子類進行修改
	final void tempalteMethod() {
		primitiveOperation1();
		primitiveOperation2();
		concreteOperation();
		hook();
	}
}
// 這兩個方法定義爲抽象的,子類負責具體實現
abstract void primitiveOperation1();
abstract void primitiveOperation2();
// concreateOperation方法定義爲final, 防止子類進行修改
final void concreteOperation() {
	// 具體實現
};
// 鉤子方法, 能夠留空,也能夠有默認實現. 子類能夠決定是否要進行覆蓋.
void hook() {}

抽象類的代碼如上, 模板方法中對應的關注點在代碼註釋中有詳細說明. 代碼中有hook()方法, 又被稱做鉤子方法. 鉤子方法可以幫助咱們修改模板方法中具體的執行邏輯. 由於hook()方法前面沒有加入abstract關鍵字, 因此子類能夠選擇不實現.設計

具體實現

模板方法模式在不少框架中都有具體的使用, 好比Spring, JDK源碼中的排序等. 這個模式讓框架控制如何作事情, 而由使用框架的人來指定框架算法中每一個步驟的細節.code

相關文章
相關標籤/搜索