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

下載本文檔

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

文檔簡介

1、第26章模板方法模式本章教學(xué)內(nèi)容w 模板方法模式 模式動機與定義模式動機與定義 模式結(jié)構(gòu)與分析模式結(jié)構(gòu)與分析 模式實例與解析模式實例與解析 模式效果與應(yīng)用模式效果與應(yīng)用 模式擴展模式擴展模板方法模式w模式動機模板方法模式w 模式動機 模板方法模式是模板方法模式是基于繼承基于繼承的代碼復(fù)用基本技術(shù),模板方法模式的結(jié)的代碼復(fù)用基本技術(shù),模板方法模式的結(jié)構(gòu)和用法也是面向?qū)ο笤O(shè)計的核心之一。在模板方法模式中,可以構(gòu)和用法也是面向?qū)ο笤O(shè)計的核心之一。在模板方法模式中,可以將相同的代碼放在父類中,而將不同的方法實現(xiàn)放在不同的子類中將相同的代碼放在父類中,而將不同的方法實現(xiàn)放在不同的子類中。 在模板方法模式

2、中,我們需要準備一個抽象類,在模板方法模式中,我們需要準備一個抽象類,將部分邏輯以具體將部分邏輯以具體方法以及具體構(gòu)造函數(shù)的形式實現(xiàn)方法以及具體構(gòu)造函數(shù)的形式實現(xiàn),然后,然后聲明一些抽象方法來讓子聲明一些抽象方法來讓子類實現(xiàn)剩余的邏輯類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn),法,從而對剩余的邏輯有不同的實現(xiàn),這就是模板方法模式的用意。這就是模板方法模式的用意。模板方法模式體現(xiàn)了面向?qū)ο蟮闹T多重要思想,是一種使用頻率較模板方法模式體現(xiàn)了面向?qū)ο蟮闹T多重要思想,是一種使用頻率較高的模式。高的模式。模板方法模式

3、w 模式定義模板方法模式模板方法模式(Template Method Pattern):定義一:定義一個操作中個操作中算法的骨架算法的骨架,而將一些步驟,而將一些步驟延遲到子類延遲到子類中,模中,模板方法使得子類板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟該算法的某些特定步驟。模板方法是一種。模板方法是一種類行為型類行為型模式。模式。模板方法模式w 模式結(jié)構(gòu)模板方法模式包含如下角色:模板方法模式包含如下角色: AbstractClass: 抽象類抽象類 ConcreteClass: 具體子類具體子類 模板方法模式w 模式分析 模板方法模

4、式是一種類的行為型模式,在它的結(jié)構(gòu)圖中模板方法模式是一種類的行為型模式,在它的結(jié)構(gòu)圖中只只有類之間的繼承關(guān)系,沒有對象關(guān)聯(lián)關(guān)系有類之間的繼承關(guān)系,沒有對象關(guān)聯(lián)關(guān)系。 在模板方法模式的使用過程中,要求開發(fā)抽象類和開發(fā)具在模板方法模式的使用過程中,要求開發(fā)抽象類和開發(fā)具體子類的設(shè)計師之間進行協(xié)作。一個設(shè)計師負責給出體子類的設(shè)計師之間進行協(xié)作。一個設(shè)計師負責給出一個一個算法的輪廓和骨架算法的輪廓和骨架,另一些設(shè)計師則,另一些設(shè)計師則負責給出這個算法的負責給出這個算法的各個邏輯步驟各個邏輯步驟。實現(xiàn)這些具體邏輯步驟的方法稱為。實現(xiàn)這些具體邏輯步驟的方法稱為基本方基本方法法(Primitive Meth

5、od),而將這些基本法方法匯總起來,而將這些基本法方法匯總起來的方法稱為的方法稱為模板方法模板方法(Template Method),模板方法模,模板方法模式的名字從此而來。式的名字從此而來。 模板方法模式w 模式分析 模板方法:一個模板方法是模板方法:一個模板方法是定義在抽象類中的、把基本操定義在抽象類中的、把基本操作方法組合在一起作方法組合在一起形成一個總算法或一個總行為的方法。形成一個總算法或一個總行為的方法。 基本方法:基本方法是基本方法:基本方法是實現(xiàn)算法各個步驟的方法實現(xiàn)算法各個步驟的方法,是模板,是模板方法的組成部分。方法的組成部分。 抽象方法(Abstract Method)

6、具體方法(Concrete Method) 鉤子方法(Hook Method):“掛鉤”方法和空方法模板方法模式w 模式分析抽象方法:一個抽象方法由抽象聲明類來聲明,由其具體子類實現(xiàn)。在Java語言里一個抽象方法以abstract關(guān)鍵字標識。具體方法:一個具體方法由一個抽象類或具體類聲明并實現(xiàn),其子類可以進行覆蓋也可以直接繼承。在Java語言中,一個具體方法沒有abstract關(guān)鍵字。鉤子方法:一個鉤子方法有一個抽象類或具體類聲明并實現(xiàn),其子類可能會加以擴展。模板方法模式w 模式分析 鉤子方法(Hook Method)模板方法模式w 模式分析 典型的抽象類代碼如下所示:典型的抽象類代碼如下所示

7、:模板方法模式w 模式分析 典型的具體子類代碼如下所示:典型的具體子類代碼如下所示:模板方法模式w 模式分析在模板方法模式中,由于面向?qū)ο蟮亩鄳B(tài)性,子類對在模板方法模式中,由于面向?qū)ο蟮亩鄳B(tài)性,子類對象在運行時將覆蓋父類對象,子類中定義的方法也將象在運行時將覆蓋父類對象,子類中定義的方法也將覆蓋父類中定義的方法,因此程序在運行時,覆蓋父類中定義的方法,因此程序在運行時,具體子具體子類的基本方法將覆蓋父類中定義的基本方法類的基本方法將覆蓋父類中定義的基本方法,子類的子類的鉤子方法也將覆蓋父類的鉤子方法鉤子方法也將覆蓋父類的鉤子方法,從而可以,從而可以通過在通過在子類中實現(xiàn)的鉤子方法對父類方法的執(zhí)

8、行進行約束子類中實現(xiàn)的鉤子方法對父類方法的執(zhí)行進行約束,實現(xiàn)子類對父類行為的反向控制實現(xiàn)子類對父類行為的反向控制。模板方法模式w 模板方法模式實例與解析實例一:銀行業(yè)務(wù)辦理流程實例一:銀行業(yè)務(wù)辦理流程 在銀行辦理業(yè)務(wù)時,一般都包含幾個基本步驟,首先需要取號排隊,然后辦理具體業(yè)務(wù),最后需要對銀行工作人員進行評分。無論具體業(yè)務(wù)是取款、存款還是轉(zhuǎn)賬,其基本流程都一樣。現(xiàn)使用模板方法模式模擬銀行業(yè)務(wù)辦理流程。模板方法模式w 模板方法模式實例與解析實例一:銀行業(yè)務(wù)辦理流程實例一:銀行業(yè)務(wù)辦理流程 takeNumber();transact();evaluate();BankTemplateMethoda

9、bstract +takeNumber ()transact ()evaluate ()process ().: void: void: void: voidDeposit+ transact ().: voidWithdraw+ transact ().: voidTransfer+ transact ().: void模板方法模式w 模板方法模式實例與解析實例一:銀行業(yè)務(wù)辦理流程實例一:銀行業(yè)務(wù)辦理流程 抽象類(銀行業(yè)務(wù)辦理流程類)public abstract class BankTemplateMethodPublic void takeNumber() System.out.prin

10、tln(“取號排隊”); public abstract void transact(); public void evaluate() System.out.println(“反饋評分”); public void process() this.takeNumber(); this.transact(); This.evaluate();模板方法模式w 模板方法模式實例與解析具體子類(存款類)public class Deposit extends BankTemplateMethod public void transact() System.out.println(“存款”) 具體子類(

11、取款類)public class Withdraw extengs BankTemplateMethod public void transact() System.out.println(“取款”) 模板方法模式w 模板方法模式實例與解析具體子類(轉(zhuǎn)賬類)public class Transfer extengs BankTemplateMethod public void transact() System.out.println(“轉(zhuǎn)賬”) 模板方法模式w 模板方法模式實例與解析實例二:數(shù)據(jù)庫操作模板實例二:數(shù)據(jù)庫操作模板 對數(shù)據(jù)庫的操作一般包括連接、打開、使用、關(guān)閉等步驟,在數(shù)據(jù)庫操作

12、模板類中我們定義了connDB()、openDB()、useDB()、closeDB()四個方法分別對應(yīng)這四個步驟。對于不同類型的數(shù)據(jù)庫,其操作步驟都一致。模板方法模式w 模板方法模式實例與解析實例二:數(shù)據(jù)庫操作模板實例二:數(shù)據(jù)庫操作模板 connDB();openDB();useDB();closeDB();DBOperatorabstract +connDB ()openDB ()useDB ()closeDB ()process ().: void: void: void: void: voidSQLServerDBOperator+ connDB ().: voidOracleDBOp

13、erator+ connDB ().: void模板方法模式w 模式優(yōu)缺點模板方法模式的優(yōu)點模板方法模式的優(yōu)點 模板方法模式在一個類中形式化地定義算法,而由它的子類實現(xiàn)細節(jié)的處理。 模板方法模式是一種代碼復(fù)用的基本技術(shù)。 模板方法模式導(dǎo)致一種反向的控制結(jié)構(gòu),通過一個父類調(diào)用其子類的操作,通過對子類的擴展增加新的行為,符合“開閉原則”。模板方法模式w 模式優(yōu)缺點模板方法模式的缺點模板方法模式的缺點 每個不同的實現(xiàn)都需要定義一個子類,這會導(dǎo)致類的個數(shù)增加,系統(tǒng)更加龐大,設(shè)計也更加抽象,但是更加符合“單一職責原則”,使得類的內(nèi)聚性得以提高。模板方法模式w 模式適用環(huán)境在以下情況下可以使用模板方法模式

14、:在以下情況下可以使用模板方法模式: 一次性實現(xiàn)一個算法的不變的部分,并將可變的行為留給子類來實現(xiàn)。 各子類中公共的行為應(yīng)被提取出來并集中到一個公共父類中以避免代碼重復(fù)。 對一些復(fù)雜的算法進行分割,將其算法中固定不變的部分設(shè)計為模板方法和父類具體方法,而一些可以改變的細節(jié)由其子類來實現(xiàn)。 控制子類的擴展。模板方法模式w 模式擴展關(guān)于繼承的討論關(guān)于繼承的討論 模板方法模式鼓勵我們恰當使用繼承,此模式可以用來改寫一些擁有相同功能的相關(guān)類,將可復(fù)用的一般性的行為代碼移到父類里面,而將特殊化的行為代碼移到子類里面。這也進一步說明,雖然繼承復(fù)用存在一些問題,但是在某些情況下還是可以給開發(fā)人員帶來方便,模

15、板方法模式就是體現(xiàn)繼承優(yōu)勢的模式之一。模板方法模式w 模式擴展好萊塢原則好萊塢原則 在模板方法模式中,子類不顯式調(diào)用父類的方法,而是通過覆蓋父類的方法來實現(xiàn)某些具體的業(yè)務(wù)邏輯,父類控制對子類的調(diào)用,這種機制被稱為好萊塢原則(Hollywood Principle),好萊塢原則的定義為:“不要給我們打電話,我們會給你打電話不要給我們打電話,我們會給你打電話(Dont call us, well call you)”。 在模板方法模式中,好萊塢原則體現(xiàn)在:子類不需要調(diào)用父類,而通過父類來調(diào)用子類,將某些步驟的實現(xiàn)寫在子類中,由父類來控制整個過程。 本章小結(jié)w 在模板方法模式中,定義一個操作中算法的

16、骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟。模板方法是一種類行為型模式。w 模板方法模式包含兩個角色:在抽象類中定義一系列基本操作,這些基本操作可以是具體的,也可以是抽象的,同時,在抽象類中實現(xiàn)了一個模板方法,用于定義一個算法的骨架;具體子類是抽象類的子類,用于實現(xiàn)在父類中定義的抽象基本操作以完成子類特定算法的步驟,也可以覆蓋在父類中實現(xiàn)的具體基本操作。w 在模板方法模式中,方法可以分為模板方法和基本方法,其中基本方法又可以分為抽象方法、具體方法和鉤子方法,鉤子方法根據(jù)其特點又分為空方法和與實現(xiàn)算法步驟的基本方法“掛鉤”的方法。本章小結(jié)w 模板方法模式的優(yōu)點在于在子類定

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論