設計模式之模板方法模式

2021-10-08 22:30:42 字數 1135 閱讀 5205

模板方法模式,定義乙個操作中的演算法骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變乙個算的結構即使重定義該演算法的某些特定步驟

這裡的「演算法」,我們可以理解為廣義上的「業務邏輯」,並不特指資料結構和演算法中的「演算法」。這裡的演算法骨架就是「模板」,包含演算法骨架的方法就是「模板方法」,這也是模板方法模式名字的由來。

模板方法模式是通過把不變行為搬移到基類中,去除子類中的重複**來體現它的優勢,提供了乙個很好的**復用平台。

當不變的和可變的行為在方法的子類實現中混合在一起的時候,不變的行為就會在子類中重複出現,我們通過可以借助模板方法模式把這些行為搬移到單一的地方,這樣就幫助子類擺脫重複的不變行為的糾纏。

來看乙個簡單的示例:

internal abstract class abstractclass

}internal class concreteclassa : abstractclass

protected override void primitiveoperation2()

}internal class concreteclassb : abstractclass

protected override void primitiveoperation2()

}

模板模式有兩大作用:復用和擴充套件。其中,復用指的是,所有的子類可以復用父類中提供的模板方法的**。擴充套件指的是,框架通過模板模式提供功能擴充套件點,讓框架使用者可以在不修改框架原始碼的情況下,基於擴充套件點定製化框架的功能。

我一直覺得模板方法這個設計模式是最簡單最實用最能體現物件導向特性的乙個設計模式

物件導向的三大特性,封裝、繼承、多型在模板方法模式中都有體現

一些通用的邏輯通常會封裝在父類中,不同的部分通常在父類中定義乙個抽象方法或者虛方法(具體根據實際場景選擇),然後在子類中繼承父類以復用父類中的通用邏輯,在具體的子類中實現需要重寫的邏輯,以此來實現多型

模板方法模式在有些場景下可能需要一些變通,標準的模板方法模式需要繼承,但是 c# 是單繼承的語言,在沒有辦法繼承的時候,通常我們可以借助委託來實現,不同的邏輯需要重寫的邏輯抽象換成乙個委託,通過委託來替換不同的實現邏輯

模板設計模式 PHP設計模式之模板方法模式

模板方法模式,也是我們經常會在不經意間有會用到的模式之一。這個模式是對繼承的最好詮釋。當子類中有重複的動作時,將他們提取出來,放在父類中進行統一的處理,這就是模板方法模式的最簡單通俗的解釋。就像我們平時做專案,每次的專案流程實都差不多,都有調研 開發 測試 部署上線等流程。而具體到每個專案中,這些流...

設計模式之模板方法設計模式

父類抽象出子類共有的方法,子類實現各自不同的業務。總之就是一種行為有他們共同的方法,只是他們具體的實現不一樣。比如開車這種行為模式,啟動 換擋 踩油門。每種型號品牌的車都有共同的行為,但是不同型號品牌的車的實現方式可能不同,需要每個品牌型號的車自己實現這些功能。這樣的定義上面行為的模式,稱之為模板方...

設計模式之模板方法模式

定義 定義乙個操作中演算法的框架,而將一些步驟延遲到子類中,使得子類可以不改變演算法的結構即可重定義該演算法中的某些特定步驟 型別 行為類模式 事實上,模板方法是程式設計中乙個經常用到的模式。比如,給定乙個整數陣列,把陣列中的數由大到小順序,然後把排序之後的結果列印出來。這個需求大體可以分為兩部分,...