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