版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、本章教學內(nèi)容w 模板方法模式 模式動機與定義模式動機與定義 模式結(jié)構與分析模式結(jié)構與分析 模式實例與解析模式實例與解析 模式效果與應用模式效果與應用模板方法模式w模式動機模板方法模式w 模式動機 模板方法模式是模板方法模式是基于繼承基于繼承的代碼復用基本技術,模板方法模式的結(jié)的代碼復用基本技術,模板方法模式的結(jié)構和用法也是面向?qū)ο笤O計的核心之一。在模板方法模式中,可以構和用法也是面向?qū)ο笤O計的核心之一。在模板方法模式中,可以將相同的代碼放在父類中,而將不同的方法實現(xiàn)放在不同的子類中將相同的代碼放在父類中,而將不同的方法實現(xiàn)放在不同的子類中。 在模板方法模式中,我們需要準備一個抽象類,在模板方法
2、模式中,我們需要準備一個抽象類,將部分邏輯以具體將部分邏輯以具體方法以及具體構造函數(shù)的形式實現(xiàn)方法以及具體構造函數(shù)的形式實現(xiàn),然后,然后聲明一些抽象方法來讓子聲明一些抽象方法來讓子類實現(xiàn)剩余的邏輯類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn),法,從而對剩余的邏輯有不同的實現(xiàn),這就是模板方法模式的用意。這就是模板方法模式的用意。模板方法模式體現(xiàn)了面向?qū)ο蟮闹T多重要思想,是一種使用頻率較模板方法模式體現(xiàn)了面向?qū)ο蟮闹T多重要思想,是一種使用頻率較高的模式。高的模式。模板方法模式w 模式定義模板方法模式模板方法模式(
3、Template Method Pattern):定義一:定義一個操作中個操作中算法的骨架算法的骨架,而將一些步驟,而將一些步驟延遲到子類延遲到子類中,模中,模板方法使得子類板方法使得子類可以不改變一個算法的結(jié)構即可重定義可以不改變一個算法的結(jié)構即可重定義該算法的某些特定步驟該算法的某些特定步驟。模板方法模式w 模式定義Template Method Pattern: Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subc
4、lasses redefine certain steps of an algorithm without changing the algorithms structure. Frequency of use: medium模板方法模式w 模式結(jié)構模板方法模式w 模式結(jié)構模板方法模式包含如下角色:模板方法模式包含如下角色: AbstractClass: 抽象類 ConcreteClass: 具體子類 模板方法模式w 模式分析 模板方法模式是一種類的行為型模式,在它的結(jié)構圖中模板方法模式是一種類的行為型模式,在它的結(jié)構圖中只只有類之間的繼承關系,沒有對象關聯(lián)關系有類之間的繼承關系,沒有對象關聯(lián)
5、關系。 在模板方法模式的使用過程中,要求開發(fā)抽象類和開發(fā)具在模板方法模式的使用過程中,要求開發(fā)抽象類和開發(fā)具體子類的設計師之間進行協(xié)作。一個設計師負責給出體子類的設計師之間進行協(xié)作。一個設計師負責給出一個一個算法的輪廓和骨架算法的輪廓和骨架,另一些設計師則,另一些設計師則負責給出這個算法的負責給出這個算法的各個邏輯步驟各個邏輯步驟。實現(xiàn)這些具體邏輯步驟的方法稱為。實現(xiàn)這些具體邏輯步驟的方法稱為基本方基本方法法(Primitive Method),而將這些基本法方法匯總起來,而將這些基本法方法匯總起來的方法稱為的方法稱為模板方法模板方法(Template Method),模板方法模,模板方法模式
6、的名字從此而來。式的名字從此而來。 模板方法模式w 模式分析 模板方法:一個模板方法是模板方法:一個模板方法是定義在抽象類中的、把基本操定義在抽象類中的、把基本操作方法組合在一起作方法組合在一起形成一個總算法或一個總行為的方法。形成一個總算法或一個總行為的方法。 基本方法:基本方法是基本方法:基本方法是實現(xiàn)算法各個步驟的方法實現(xiàn)算法各個步驟的方法,是模板,是模板方法的組成部分。方法的組成部分。 抽象方法抽象方法(Abstract Method) 具體方法具體方法(Concrete Method) 鉤子方法鉤子方法(Hook Method):“掛鉤掛鉤”方法和空方法方法和空方法模板方法模式w 模
7、式分析 鉤子方法鉤子方法(Hook Method)public void template() open(); display(); if(isPrint() print(); public boolean isPrint() return true;模板方法模式w 模式分析 典型的抽象類代碼如下所示:典型的抽象類代碼如下所示:public abstract class AbstractClass public void templateMethod() /模板方法模板方法 primitiveOperation1(); primitiveOperation2(); primitiveOpera
8、tion3(); public void primitiveOperation1() /基本方法具體方法 /實現(xiàn)代碼 public abstract void primitiveOperation2(); /基本方法抽象方法 public void primitiveOperation3() /基本方法鉤子方法 模板方法模式w 模式分析 典型的具體子類代碼如下所示:典型的具體子類代碼如下所示:public class ConcreteClass extends AbstractClass public void primitiveOperation2() /實現(xiàn)代碼 public void p
9、rimitiveOperation3() /實現(xiàn)代碼 模板方法模式w 模式分析在模板方法模式中,由于面向?qū)ο蟮亩鄳B(tài)性,子類對在模板方法模式中,由于面向?qū)ο蟮亩鄳B(tài)性,子類對象在運行時將覆蓋父類對象,子類中定義的方法也將象在運行時將覆蓋父類對象,子類中定義的方法也將覆蓋父類中定義的方法,因此程序在運行時,覆蓋父類中定義的方法,因此程序在運行時,具體子具體子類的基本方法將覆蓋父類中定義的基本方法類的基本方法將覆蓋父類中定義的基本方法,子類的子類的鉤子方法也將覆蓋父類的鉤子方法鉤子方法也將覆蓋父類的鉤子方法,從而可以,從而可以通過在通過在子類中實現(xiàn)的鉤子方法對父類方法的執(zhí)行進行約束子類中實現(xiàn)的鉤子方法
10、對父類方法的執(zhí)行進行約束,實現(xiàn)子類對父類行為的反向控制實現(xiàn)子類對父類行為的反向控制。模板方法模式w 模板方法模式實例與解析實例一:銀行業(yè)務辦理流程實例一:銀行業(yè)務辦理流程 在銀行辦理業(yè)務時,一般都包含幾個基本步驟,首先在銀行辦理業(yè)務時,一般都包含幾個基本步驟,首先需要取號排隊,然后辦理具體業(yè)務,最后需要對銀行需要取號排隊,然后辦理具體業(yè)務,最后需要對銀行工作人員進行評分。無論具體業(yè)務是取款、存款還是工作人員進行評分。無論具體業(yè)務是取款、存款還是轉(zhuǎn)賬,其基本流程都一樣。現(xiàn)使用模板方法模式模擬轉(zhuǎn)賬,其基本流程都一樣?,F(xiàn)使用模板方法模式模擬銀行業(yè)務辦理流程。銀行業(yè)務辦理流程。模板方法模式w 模板方法
11、模式實例與解析實例一:銀行業(yè)務辦理流程實例一:銀行業(yè)務辦理流程 takeNumber();transact();evaluate();BankTemplateMethodabstract +takeNumber ()transact ()evaluate ()process ().: void: void: void: voidDeposit+ transact ().: voidWithdraw+ transact ().: voidTransfer+ transact ().: void模板方法模式w模板方法模式實例與解析實例二:計算存款利息實例二:計算存款利息 假設系統(tǒng)需要支持兩種存款賬
12、號,即貨幣市場假設系統(tǒng)需要支持兩種存款賬號,即貨幣市場(Money Market)賬號和定賬號和定期存款期存款(Certificate of Deposite)賬號。這兩種賬號的存款利息是不同的,賬號。這兩種賬號的存款利息是不同的,因此,在計算一個存戶的存款利息額時,必須區(qū)分兩種不同的賬號類型。因此,在計算一個存戶的存款利息額時,必須區(qū)分兩種不同的賬號類型。 這個系統(tǒng)的總行為應當是計算出利息,這也就決定了作為一個模板方這個系統(tǒng)的總行為應當是計算出利息,這也就決定了作為一個模板方法模式的頂級邏輯應當是利息計算。由于利息計算涉及到兩個步驟:一個法模式的頂級邏輯應當是利息計算。由于利息計算涉及到兩個
13、步驟:一個基本方法給出賬號種類,另一個基本方法給出利息百分比。這兩個基本方基本方法給出賬號種類,另一個基本方法給出利息百分比。這兩個基本方法構成具體邏輯,因為賬號的類型不同,所以具體邏輯會有所不同。法構成具體邏輯,因為賬號的類型不同,所以具體邏輯會有所不同。 顯然,系統(tǒng)需要一個抽象角色給出頂級行為的實現(xiàn),而將兩個作為細顯然,系統(tǒng)需要一個抽象角色給出頂級行為的實現(xiàn),而將兩個作為細節(jié)步驟的基本方法留給具體子類實現(xiàn)。由于需要考慮的賬號有兩種:一是節(jié)步驟的基本方法留給具體子類實現(xiàn)。由于需要考慮的賬號有兩種:一是貨幣市場賬號,二是定期存款賬號。系統(tǒng)的類結(jié)構如下圖所示。貨幣市場賬號,二是定期存款賬號。系統(tǒng)
14、的類結(jié)構如下圖所示。模板方法模式w 模板方法模式實例與解析 實例二:計算存款利息實例二:計算存款利息 模板方法模式w 模板方法模式實例與解析實例三:數(shù)據(jù)庫操作模板實例三:數(shù)據(jù)庫操作模板 對數(shù)據(jù)庫的操作一般包括連接、打開、使用、關閉等對數(shù)據(jù)庫的操作一般包括連接、打開、使用、關閉等步驟,在數(shù)據(jù)庫操作模板類中我們定義了步驟,在數(shù)據(jù)庫操作模板類中我們定義了connDB()、openDB()、useDB()、closeDB()四個方法分別對四個方法分別對應這四個步驟。對于不同類型的數(shù)據(jù)庫(如應這四個步驟。對于不同類型的數(shù)據(jù)庫(如SQL Server和和Oracle),其操作步驟都一致,只是連接),其操作
15、步驟都一致,只是連接數(shù)據(jù)庫數(shù)據(jù)庫connDB()方法有所區(qū)別,現(xiàn)使用模板方法模方法有所區(qū)別,現(xiàn)使用模板方法模式對其進行設計。式對其進行設計。模板方法模式w 模板方法模式實例與解析實例三:數(shù)據(jù)庫操作模板實例三:數(shù)據(jù)庫操作模板 connDB();openDB();useDB();closeDB();DBOperatorabstract +connDB ()openDB ()useDB ()closeDB ()process ().: void: void: void: void: voidSQLServerDBOperator+ connDB ().: voidOracleDBOperator+
16、connDB ().: void模板方法模式w 模式優(yōu)缺點模板方法模式的優(yōu)點模板方法模式的優(yōu)點 模板方法模式模板方法模式在一個類中形式化地定義算法在一個類中形式化地定義算法,而,而由它的子由它的子類實現(xiàn)細節(jié)的處理類實現(xiàn)細節(jié)的處理。 模板方法模式是一種模板方法模式是一種代碼復用的基本技術代碼復用的基本技術。模板方法模式w 模式優(yōu)缺點模板方法模式的缺點模板方法模式的缺點 每個不同的實現(xiàn)都需要定義一個子類,這會每個不同的實現(xiàn)都需要定義一個子類,這會導致類的導致類的個數(shù)增加個數(shù)增加,系統(tǒng)更加龐大,設計也更加抽象,但是更,系統(tǒng)更加龐大,設計也更加抽象,但是更加符合加符合“單一職責原則單一職責原則”,使得
17、類的內(nèi)聚性得以提高。,使得類的內(nèi)聚性得以提高。模板方法模式w 模式適用環(huán)境在以下情況下可以使用模板方法模式:在以下情況下可以使用模板方法模式: 一次性實現(xiàn)一個算法的不變的部分,并一次性實現(xiàn)一個算法的不變的部分,并將可變的行為留給子類將可變的行為留給子類來實現(xiàn)來實現(xiàn)。 各子類中公共的行為應被提取出來并集中到一個公共父類各子類中公共的行為應被提取出來并集中到一個公共父類中以中以避免代碼重復。避免代碼重復。 對一些復雜的算法進行分割對一些復雜的算法進行分割,將其算法中固定不變的部分設計,將其算法中固定不變的部分設計為模板方法和父類具體方法,而一些可以改變的細節(jié)由其子類為模板方法和父類具體方法,而一些
18、可以改變的細節(jié)由其子類來實現(xiàn)。來實現(xiàn)。 控制控制子類的擴展子類的擴展。本章小結(jié)w 在模板方法模式中,定義一個操作中算法的骨架,而將一些步驟延遲到子類中,模板方法使得子類可以不改變一個算法的結(jié)構即可重定義該算法的某些特定步驟。模板方法是一種類行為型模式。w 模板方法模式包含兩個角色:在抽象類中定義一系列基本操作,這些基本操作可以是具體的,也可以是抽象的,同時,在抽象類中實現(xiàn)了一個模板方法,用于定義一個算法的骨架;具體子類是抽象類的子類,用于實現(xiàn)在父類中定義的抽象基本操作以完成子類特定算法的步驟,也可以覆蓋在父類中實現(xiàn)的具體基本操作。w 在模板方法模式中,方法可以分為模板方法和基本方法,其中基本方法又可以分為抽象方法、具體方法和鉤子方法,鉤子方法根據(jù)其特點又分為空方法和與實現(xiàn)算法步驟的基本方法“掛鉤”的方法。本章小結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度樓頂廣告牌租賃期廣告位使用規(guī)范合同4篇
- 二零二五版中央空調(diào)系統(tǒng)銷售及維護一體化服務合同3篇
- 專業(yè)技術職務聘任合同書(2024年度)版
- 2025年度高鐵站臨建施工及安全監(jiān)管合同4篇
- 二零二五版供應鏈融資借款合同補簽協(xié)議3篇
- 二零二五年架子工高空作業(yè)安全承包合同范本6篇
- 二零二五年股份有限公司股東先行墊資及資金返還合同3篇
- 2025版高速公路綠化帶養(yǎng)護專項服務合同4篇
- 2025年度新型物流企業(yè)陸上運輸貨物全面保險服務合同4篇
- 二零二五年度集資房購房合同綠色建筑認證合同3篇
- 河南省鄭州外國語高中-【高二】【上期中】【把握現(xiàn)在 蓄力高三】家長會【課件】
- 天津市武清區(qū)2024-2025學年八年級(上)期末物理試卷(含解析)
- 《徐霞客傳正版》課件
- 2025年中煤電力有限公司招聘筆試參考題庫含答案解析
- 企業(yè)內(nèi)部控制與財務風險防范
- 高端民用航空復材智能制造交付中心項目環(huán)評資料環(huán)境影響
- 建設項目施工現(xiàn)場春節(jié)放假期間的安全管理方案
- 胃潴留護理查房
- 污水處理廠運營方案計劃
- 眼科慢病管理新思路
- 劉先生家庭投資理財規(guī)劃方案設計
評論
0/150
提交評論