日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模板方法模式(Template Method Pattern)学习笔记

發布時間:2023/11/30 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模板方法模式(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)学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。