發(fā)文章
發(fā)文工具
撰寫
網(wǎng)文摘手
文檔
視頻
思維導(dǎo)圖
隨筆
相冊
原創(chuàng)同步助手
其他工具
圖片轉(zhuǎn)文字
文件清理
AI助手
留言交流
前言
模版方法模式:定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模版方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。
結(jié)構(gòu)圖
代碼實(shí)現(xiàn)
AbstractClass是抽象類,其實(shí)也就是一抽象類,定義并實(shí)現(xiàn)了一個模版方法,這個模版方法一般是一個具體方法,它給出了一個頂級邏輯的骨架,而邏輯的組成步驟在相應(yīng)的抽象操作中,推遲到子類實(shí)現(xiàn)。頂級邏輯也有可能調(diào)用一些具體方法。
public abstract class AbstractClass { public abstract void PrimitiveOperation1(); public abstract void PrimitiveOperation2(); public void TemplateMethod() { PrimitiveOperation1(); PrimitiveOperation2(); Console.WriteLine(""); } }
ConcreteClassA,實(shí)現(xiàn)父類所定義的一個或多個抽象方法。每一個AbstractClass都可以有任意多個ConcreteClass與之對應(yīng),而每一個ConcreteClass都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實(shí)現(xiàn),從而使得頂級邏輯的實(shí)現(xiàn)各不相同。
public
class
ConCreteClassA : AbstractClass
{
override
void
PrimitiveOperation1()
Console.WriteLine(
"具體類A方法1實(shí)現(xiàn)"
);
}
PrimitiveOperation2()
"具體類A方法2實(shí)現(xiàn)"
ConCreteClassB: AbstractClass
"具體類B方法1實(shí)現(xiàn)"
"具體類B方法2實(shí)現(xiàn)"
客戶端調(diào)用
Program
static
Main(
string
[] args)
AbstractClass Test;
Test =
new
ConCreteClassA();
Test.TemplateMethod();
ConCreteClassB();
Console.ReadLine();
運(yùn)行結(jié)果如下
總結(jié)
當(dāng)不變的和可變的行為在方法的子類實(shí)現(xiàn)中混合在一起的時候,不變的行為就會在子類中重復(fù)出現(xiàn)。我們通過模版方法模式把這些行為搬移到單一的地方,這些幫助子類擺脫重復(fù)的不變行為的糾纏。
來自: 昵稱10504424 > 《工作》
0條評論
發(fā)表
請遵守用戶 評論公約
模板方法模式(Template Method Pattern)
每一個抽象模版角色都可以有任意多個具體模版角色與之對應(yīng),而每一個具體模版角色都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實(shí)現(xiàn),從而使得頂級邏輯的實(shí)現(xiàn)各不相同。比如在【GOF95】一...
C#設(shè)計模式系列:模板方法模式(Template Method)
C#設(shè)計模式系列:模板方法模式(Template Method)在模板方法模式中,AbstractClass中的TemplateMethod提供了一個標(biāo)準(zhǔn)模板,該模板包含P...
設(shè)計模式之模板方法
WriteLine("具體類A 方法1 的實(shí)現(xiàn)"); } protected override void PrimitiveOperation2() { Console.WriteLine("具體類A 方法2 的實(shí)現(xiàn)"); }}internal class ConcreteClassB : Abstr...
PHP設(shè)計模式之模板方法模式
PHP設(shè)計模式之模板方法模式。子類只需要定義自己的實(shí)現(xiàn)就可以了,剩下的重復(fù)代碼都讓父類去完成,如果沒有父類,它們都需要自己實(shí)現(xiàn)一個...
大話設(shè)計-模板方法模式
namespace ConsoleApp2{ class Program { static void Main(string[] args) { TestPaper testPaperA = new TestPaperA();} } class ConcreteClass : AbstractClass { public override void PrimitiveOp...
.NET設(shè)計模式(16):模版方法(Template Method)
NET設(shè)計模式(16):模版方法(Template Method)顯然在這個頂級的框架DataAccessObject中給出了固定的輪廓,方法Run()便是模版方法,Te...
從現(xiàn)實(shí)生活理解Spring中 常用的設(shè)計模式
從現(xiàn)實(shí)生活理解Spring中 常用的設(shè)計模式。解釋器模式(Interpreter)、模板方法模式(TemplateMethod)、 責(zé)任鏈模式(ChainofResponsib...
HeadFirst設(shè)計模式
行為型模式之模板方法
模板方法(Template Method)模式的定義如下:定義一個操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結(jié)...
微信掃碼,在手機(jī)上查看選中內(nèi)容