模板方法模式(Template Method Pattern)学习笔记
模板方法模式可以所是最為常見的一種設(shè)計(jì)模式了,出乎很多人意料的是,很多人已經(jīng)在他們的代碼中用到了模板方法模式而沒有意識到自己用到了這個(gè)模式,模板方法模式幾乎可以在所有的抽象基類中找到。
通過模板方法模式我們可以定義一個(gè)操作的骨架,而將該操作中的各個(gè)步驟的具體實(shí)現(xiàn)延遲至派生類中。代表這些具體實(shí)現(xiàn)的方法同常稱作基本方法(Primitive Method),而調(diào)用這些基本方法的方法叫做模板方法(Template Method)。呵呵,你這是已經(jīng)明白模板方法模式名字的由來了。
模板方法的結(jié)構(gòu)圖:
?
讓我們先來看一個(gè)具體的關(guān)于報(bào)稅的簡單例子
類關(guān)系圖:
?
public?abstract?class?BasicTax{
?protected?float?income;//你的收入
?public?void?ReportTax()
?{
??//計(jì)算一下你該給州政府交多少稅
??float?sTax?=?calculateStateTax();
??//計(jì)算一下你該給聯(lián)邦政府交多少稅
??float?fTax?=?calcualteFedTax();
??//算算你破產(chǎn)沒
??bool?ok?=?CheckBankBalance(sTax?+?fTax);
??if(!ok)
??{
???//申請破產(chǎn)
???FileBankruptcy();
??}
??else
??{
???//如果沒破產(chǎn)就把稅交上吧
???SendMoneyToGov(sTax?+?fTax);
??}
?}
?protected?abstract?float?calculateStateTax();
?protected?abstract?float?calculateFedTax();
}
事實(shí)上,不同的州政府設(shè)定的稅率或是計(jì)算方法有可能是不同的,聯(lián)邦政府在某些時(shí)期對稅率也會(huì)有所調(diào)整,所以BasicTax抽象類的創(chuàng)建者不必關(guān)心給個(gè)州的稅率是如何的,也 不必關(guān)心聯(lián)邦政府會(huì)在什么時(shí)候調(diào)整稅率,他只要知道報(bào)稅人要么報(bào)稅要么申請破產(chǎn)就可以了,
BasicTax是個(gè)抽象類,你沒有辦法直接實(shí)例化它,你要做的就是創(chuàng)建一個(gè)繼承自BasicTax的派生類,并實(shí)現(xiàn)caculateStateTax和caculateFedTax這兩個(gè)抽象方法。
public?calss?WashingtonTax?:?BasicTax
{
?//實(shí)現(xiàn)抽象方法
?protected?override?float?calculateStateTax()
?{
??return?income*0.12F;
?}
?protected?override?float?calculateFedTax()
?{
??return?income*0.23F;
?}
}
//猶他州報(bào)稅具體實(shí)現(xiàn)
public?class?UltahTax?:?BasicTax
{
?//實(shí)現(xiàn)抽象方法
?protected?override?float?calculateStateTax()
?{
??return?income*0.24F;
?}
?protected?override?float?calculateFedTax()
?{
??return?income*0.23F;
?}
}
從上面的代碼中你可以看到,WashingtonTax和UltahTax分別為華盛頓州和猶他州報(bào)稅方法提供了具體的實(shí)現(xiàn)
BasicTax?WATax?=?new?WashingtoTax();WATax.ReportTax();
BasicTax?UTTax?=?new?UltahTax();
UTTax.ReportTax();
好了讓我們來回顧一下,在BasicTax的例子中ReportTax其實(shí)就是一個(gè)模板方法,這個(gè)方法描述了報(bào)稅時(shí)所要執(zhí)行的步驟,卻沒有描述每一步是如何執(zhí)行的,因?yàn)樗蕾嚨姆椒ㄟ€沒有實(shí)現(xiàn)。模板方法強(qiáng)調(diào)的是不同對象之間及方法之間如何協(xié)作。
在實(shí)際情況中,模板方法通常包含了業(yè)務(wù)領(lǐng)域知識,這些領(lǐng)域知識規(guī)定了不同方法是如何協(xié)作的;抽象方法為模板方法調(diào)用的方法提供了客戶化實(shí)現(xiàn)的手段。
模板方法描述了特定操作步驟的骨架或是處理流程,而不是直接規(guī)定給個(gè)操作該如何執(zhí)行,將抽象與具體分割開來,從而保證代碼可以最大限度地被復(fù)用。
轉(zhuǎn)載于:https://www.cnblogs.com/matrixnull/archive/2006/12/28/606301.html
總結(jié)
以上是生活随笔為你收集整理的模板方法模式(Template Method Pattern)学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MD5和SHA1加密
- 下一篇: 我的本本买回来了