在物件導向開發過程中,通常會遇到這樣的乙個問題,我們知道乙個演算法所需的關鍵步驟,並確定了這些步驟的執行順序,但是,某些步驟的具體實現是未知的,或者說某些步驟的實現是會隨著環境的變化而改變的,例如,執行程式的流程大致如下:
對於不同的程式語言,上述 4 個步驟都是不一樣的,但是,它們的執行流程是固定的,這類問題的解決方法就是我們接下來要介紹的模板方法模式。
定義乙個操作中的演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變乙個演算法的結構即可重定義該演算法的某些特定步驟。
角色介紹:
/**
* 抽象的computer
*/public
class
abstractcomputer
protected
void
checkhardware()
protected
void
loados()
protected
void
login()
/*** 啟動計算機方法,步驟固定為 開啟電源、硬體檢測、載入作業系統、進入系統
*/public
final
void
startup()
}/**
* 程式設計師計算機
*/public
class
codercomputer
extends
abstractcomputer
}/**
* 軍用計算機
*/public
class
militarycomputer
extends
abstractcomputer
@override
protected
void
login()
}
從上面的例子可以看到,在 startup 方法中有一些固定的步驟,依次為開啟電源、檢測硬體、載入系統、使用者登入 4 個步驟,這 4 個步驟是計算機開機過程中不會變動,但是不同的使用者的這幾個步驟的實現可能各不相同,因此,子類需要覆寫相應的方法來進行自定義處理,這裡需要注意的是 startup 為 final 方法,這樣就保證了邏輯流程不能被子類修改,子類只能夠改變某一步驟中的具體實現,這樣就保證了這個邏輯流程的穩定性。startup 中的這幾個演算法步驟我們可以稱為是乙個套路,也稱為模板方法,這也是該模式的由來。
模板方法模式用 4 個字概況就是:流程封裝。也就是吧某個固定的流程封裝到乙個 final 函式中,並且讓子類能夠定製這個流程中的某些或者所有步驟,這就要求父類提取共用的**,提公升**的復用率,同時也帶了了更好的擴充套件性。
優點:
缺點:
設計模式 Java設計模式之模板方法模式
本文源自 人生之旅 諳憶的部落格 我們先這樣來想象乙個生活中的場景,就是我們在銀行櫃檯進行辦理業務的時候,會進行這幾步 step1 進門取號 step2 填寫單據 step3 等待叫號 step4 視窗辦理 在這裡,無論是你我還是他 她,都會遵循這個模板進行業務的辦理!我們具體看step2,銀行是無...
JAVA設計模式之 模板方法模式
我們在生活中,很多事情都包含特定的一些步驟。如去銀行辦理業務,通常步驟的次序是 取號 填單 等待叫號 辦理業務。這幾個步驟中,有的是不變的,比如取號,每個人都要取,但有的是要變的,比如都有填單,但是根據不同的業務,填寫的單據不同。又比如我們外出吃飯,一般的步驟是 點餐 等待 吃飯 付錢,也能發現同樣...
java設計模式之模板方法模式
模板方法模式 和策略模式類似 通過抽象類定義乙個抽象方法和非抽象方法 子類繼承抽象類後實現抽象方法 通過改變抽象類的引入來改變呼叫的方法 將方法都放在抽象類中最好還是面向介面程式設計public abstract class abstractcalculator abstract public in...