模板方法模式_第1頁
模板方法模式_第2頁
模板方法模式_第3頁
模板方法模式_第4頁
模板方法模式_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

DesignPatterns模板方法模式河南理工大學(xué)大綱模板方法模式概述模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的應(yīng)用實(shí)例鉤子方法的使用模板方法模式的優(yōu)缺點(diǎn)與適用環(huán)境插卡驗(yàn)證業(yè)務(wù)處理(存款/取款/轉(zhuǎn)賬……)退卡模板方法模式概述請客吃飯示意圖模板方法模式概述分析請客吃飯:(1)點(diǎn)單

(2)吃東西(3)買單軟件開發(fā):某個方法的實(shí)現(xiàn)需要多個步驟(類似“請客”),其中有些步驟是固定的(類似“點(diǎn)單”和“買單”),而有些步驟并不固定,存在可變性(類似“吃東西”)模板方法模式:基本方法(“點(diǎn)單”、“吃東西”和“買單”)模板方法(“請客”)具體方法抽象方法模板方法模式概述模板方法模式的定義類行為型模式模板方法模式:定義一個操作中算法的框架,而將一些步驟延遲到子類中。模板方法模式使得子類不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。TemplateMethodPattern:Definetheskeletonofanalgorithminanoperation,deferringsomestepstosubclasses.TemplateMethodletssubclassesredefinecertainstepsofanalgorithmwithoutchangingthealgorithm'sstructure.模板方法模式概述模板方法模式的定義是一種基于繼承的代碼復(fù)用技術(shù)將一些復(fù)雜流程的實(shí)現(xiàn)步驟封裝在一系列基本方法中在抽象父類中提供一個稱之為模板方法的方法來定義這些基本方法的執(zhí)行次序,而通過其子類來覆蓋某些步驟,從而使得相同的算法框架可以有不同的執(zhí)行結(jié)果模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的結(jié)構(gòu)模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的結(jié)構(gòu)模板方法模式包含以下兩個角色:AbstractClass(抽象類)ConcreteClass(具體子類)模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的實(shí)現(xiàn)模板方法(TemplateMethod)基本方法(PrimitiveMethod)抽象方法(AbstractMethod)具體方法(ConcreteMethod)鉤子方法(HookMethod)

:“掛鉤”方法和空方法模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的實(shí)現(xiàn)鉤子方法(1)“掛鉤”方法:IsXXX(),返回類型為bool類型(2)空方法……//模板方法publicvoidTemplateMethod(){Open();Display();//通過鉤子方法來確定某步驟是否執(zhí)行if(IsPrint()){Print();}}//鉤子方法publicboolIsPrint(){returntrue;}……模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的實(shí)現(xiàn)抽象類典型代碼:abstractclassAbstractClass{//模板方法publicvoidTemplateMethod(){PrimitiveOperation1();PrimitiveOperation2();PrimitiveOperation3();}//基本方法—具體方法publicvoidPrimitiveOperation1(){//實(shí)現(xiàn)代碼}//基本方法—抽象方法

publicabstractvoidPrimitiveOperation2();//基本方法—鉤子方法publicvirtualvoidPrimitiveOperation3(){}}模板方法模式的結(jié)構(gòu)與實(shí)現(xiàn)模板方法模式的實(shí)現(xiàn)具體子類典型代碼:classConcreteClass:AbstractClass{publicoverridevoidPrimitiveOperation2(){//實(shí)現(xiàn)代碼}publicoverridevoidPrimitiveOperation3(){//實(shí)現(xiàn)代碼}}模板方法模式的應(yīng)用實(shí)例實(shí)例說明某軟件公司要為某銀行的業(yè)務(wù)支撐系統(tǒng)開發(fā)一個利息計算模塊,利息的計算流程如下:(1)系統(tǒng)根據(jù)賬號和密碼驗(yàn)證用戶信息,如果用戶信息錯誤,則系統(tǒng)顯示出錯提示。(2)如果用戶信息正確,則根據(jù)用戶類型的不同使用不同的利息計算公式計算利息(如活期賬戶和定期賬戶具有不同的利息計算公式)。(3)系統(tǒng)顯示利息。現(xiàn)使用模板方法模式設(shè)計該利息計算模塊。模板方法模式的應(yīng)用實(shí)例實(shí)例類圖銀行利息計算模塊結(jié)構(gòu)圖鉤子方法的使用實(shí)例某軟件公司要為銷售管理系統(tǒng)提供一個數(shù)據(jù)圖表顯示功能,該功能的實(shí)現(xiàn)包括以下幾個步驟:(1)從數(shù)據(jù)源獲取數(shù)據(jù)。(2)將數(shù)據(jù)轉(zhuǎn)換為XML格式。(3)以某種圖表方式顯示XML格式的數(shù)據(jù)。該功能支持多種數(shù)據(jù)源和多種圖表顯示方式,但所有的圖表顯示操作都基于XML格式的數(shù)據(jù),因此可能需要對數(shù)據(jù)進(jìn)行轉(zhuǎn)換,如果從數(shù)據(jù)源獲取的數(shù)據(jù)已經(jīng)是XML數(shù)據(jù),則無須轉(zhuǎn)換。鉤子方法的使用結(jié)構(gòu)數(shù)據(jù)圖表顯示功能結(jié)構(gòu)圖鉤子方法的使用實(shí)現(xiàn)//DataViewer.csusingSystem;namespaceTemplateMethodSample{abstractclassDataViewer{//抽象方法:獲取數(shù)據(jù)publicabstractvoidGetData();//具體方法:轉(zhuǎn)換數(shù)據(jù)publicvoidConvertData(){Console.WriteLine("將數(shù)據(jù)轉(zhuǎn)換為XML格式。");}//抽象方法:顯示數(shù)據(jù)publicabstractvoidDisplayData();//鉤子方法:判斷是否為XML格式的數(shù)據(jù)

publicvirtualboolIsNotXMLData(){returntrue;}//模板方法publicvoidProcess(){GetData();//如果不是XML格式的數(shù)據(jù)則進(jìn)行數(shù)據(jù)轉(zhuǎn)換

if(IsNotXMLData()){ConvertData();}DisplayData();}}}模板方法模式模板方法模式實(shí)例與解析實(shí)例一:銀行業(yè)務(wù)辦理流程在銀行辦理業(yè)務(wù)時,一般都包含幾個基本步驟,首先需要取號排隊,然后辦理具體業(yè)務(wù),最后需要對銀行工作人員進(jìn)行評分。無論具體業(yè)務(wù)是取款、存款還是轉(zhuǎn)賬,其基本流程都一樣。現(xiàn)使用模板方法模式模擬銀行業(yè)務(wù)辦理流程。模板方法模式模板方法模式實(shí)例與解析實(shí)例一:銀行業(yè)務(wù)辦理流程模板方法模式模板方法模式實(shí)例與解析實(shí)例二:數(shù)據(jù)庫操作模板對數(shù)據(jù)庫的操作一般包括連接、打開、使用、關(guān)閉等步驟,在數(shù)據(jù)庫操作模板類中我們定義了connDB()、openDB()、useDB()、closeDB()四個方法分別對應(yīng)這四個步驟。對于不同類型的數(shù)據(jù)庫(如SQLServer和Oracle),其操作步驟都一致,只是連接數(shù)據(jù)庫connDB()方法有所區(qū)別,現(xiàn)使用模板方法模式對其進(jìn)行設(shè)計。模板方法模式模板方法模式實(shí)例與解析實(shí)例二:數(shù)據(jù)庫操作模板模板方法模式的優(yōu)缺點(diǎn)與適用環(huán)境模式優(yōu)點(diǎn)在父類中形式化地定義一個算法,而由它的子類來實(shí)現(xiàn)細(xì)節(jié)的處理,在子類實(shí)現(xiàn)詳細(xì)的處理算法時并不會改變算法中步驟的執(zhí)行次序提取了類庫中的公共行為,將公共行為放在父類中,而通過其子類來實(shí)現(xiàn)不同的行為可實(shí)現(xiàn)一種反向控制結(jié)構(gòu),通過子類覆蓋父類的鉤子方法來決定某一特定步驟是否需要執(zhí)行更換和增加新的子類很方便,符合單一職責(zé)原則和開閉原則模板方法模式模式擴(kuò)展關(guān)于繼承的討論模板方法模式鼓勵我們恰當(dāng)使用繼承,此模式可以用來改寫一些擁有相同功能的相關(guān)類,將可復(fù)用的一般性的行為代碼移到父類里面,而將特殊化的行為代碼移到子類里面。這也進(jìn)一步說明,雖然繼承復(fù)用存在一些問題,但是在某些情況下還是可以給開發(fā)人員帶來方便,模板方法模式就是體現(xiàn)繼承優(yōu)勢的模式之一。模板方法模式模式擴(kuò)展好萊塢原則在模板方法模式中,子類不顯式調(diào)用父類的方法,而是通過覆蓋父類的方法來實(shí)現(xiàn)某些具體的業(yè)務(wù)邏輯,父類控制對子類的調(diào)用,這種機(jī)制被稱為好萊塢原則(HollywoodPrinciple),好萊塢原則的定義為:“不要給我們打電話,我們會給你打電話(Don‘tcallus,we’llcallyou)”。在模板方法模式中,好萊塢原則體現(xiàn)在:子類不需要調(diào)用父類,而通過父類來調(diào)用子類,將某些步驟的實(shí)現(xiàn)寫在子類中,由父類來控制整個過程。

模板方法模式模式擴(kuò)展鉤子方法的使用鉤子方法的引入使得子類可以控制父類的行為。最簡單的鉤子方法就是空方法,也可以在鉤子方法中定義一個默認(rèn)的實(shí)現(xiàn),如果子類不覆蓋鉤子方法,則執(zhí)行父類的默認(rèn)實(shí)現(xiàn)代碼。比較復(fù)雜一點(diǎn)的鉤子方法可以對其他方法進(jìn)行約束,這種鉤子方法通常返回一個boolean類型,即返回true或false,用來判斷是否執(zhí)行某一個基本方法。模板方法模式的優(yōu)缺點(diǎn)與適用環(huán)境模式缺點(diǎn)需要為每一個基本方法的不同實(shí)現(xiàn)提供一個子類,如果

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論