


版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第十七章模版方法模式
(TemplateMethodPattern)如果你只想掌握一種設(shè)計模式,那么它就是
-----TemplateMethod!17.1模版方法模式簡介變與不變變化是軟件設(shè)計的永恒主題,如何管理變化帶來的復(fù)雜性?設(shè)計模式的藝術(shù)性和復(fù)雜度就在于如何分析,并發(fā)現(xiàn)系統(tǒng)中的變化點和穩(wěn)定點,并使用特定的設(shè)計方法來應(yīng)對這種變化。在軟件構(gòu)建過程中,對于某一項任務(wù),它常常有穩(wěn)定的整體操作結(jié)構(gòu),但各個子步驟卻有很多改變的需求,或者由于固有的原因(比如框架與應(yīng)用之間的關(guān)系)而無法和任務(wù)的整體結(jié)構(gòu)同時實現(xiàn)。如何在確定穩(wěn)定操作結(jié)構(gòu)的前提下,來靈活應(yīng)對各個子步驟的變化或者晚期實現(xiàn)需求?17.1模版方法模式簡介準備一個抽象類,將部分邏輯以具體方法以及具體構(gòu)造子類的形式實現(xiàn),然后聲明一些抽象方法來迫使子類實現(xiàn)剩余的邏輯。不同的子類可以以不同的方式實現(xiàn)這些抽象方法,從而對剩余的邏輯有不同的實現(xiàn)。這就是模版方法模式的用意。定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。TemplateMethod使得子類可以不改變一個算法的結(jié)構(gòu)即可重定義該算法的某些特定步驟?!对O(shè)計模式》GoF17.2模版方法模式的結(jié)構(gòu)17.2模版方法模式的結(jié)構(gòu)抽象模版(AbstractClass)角色:定義了一個或多個抽象操作,以便讓子類實現(xiàn)。這些抽象操作叫做基本操作,它們是一個頂級邏輯的組成步驟。定義并實現(xiàn)了一個模版方法。這個模版方法一般是一個具體方法,它給出了一個頂級邏輯的骨架(操作步驟),而邏輯的組成步驟在相應(yīng)的抽象操作中,推遲到子類實現(xiàn)。頂級邏輯也有可能調(diào)用一些具體方法。具體模版(ConcreteClass)角色:實現(xiàn)父類所定義的一個或多個抽象方法,它們是一個頂級邏輯的組成步驟。每一個抽象模版角色都可以有任意多個具體模版角色與之對應(yīng),而每一個具體模版角色都可以給出這些抽象方法(也就是頂級邏輯的組成步驟)的不同實現(xiàn),從而使得頂級邏輯的實現(xiàn)各不相同。17.3示例汽車測試系統(tǒng):順序測試汽車的啟動、行駛、拐彎、停止等操作是否正常,但是不同品牌型號的汽車的具體測試操作可能有個別地方不一樣。示例:CarTest17.4使用繼承使用繼承作為復(fù)用的手段必須慎重!很多面向?qū)ο蟮脑O(shè)計專家從1986年就開始警告繼承關(guān)系被濫用的可能。有一些面向?qū)ο蟮木幊陶Z言,如SELF語言,甚至將類的繼承關(guān)系從語言的功能中取消掉,改為完全使用組合,其他的設(shè)計師雖然不提倡徹底取消繼承,但無一例外地鼓勵在設(shè)計中盡可能使用組合關(guān)系代替繼承關(guān)系。繼承不應(yīng)當被濫用,并不意味著繼承根本就不該使用。因為繼承容易被濫用就徹底拋棄繼承,無異于因噎廢食。繼承使得類型的等級結(jié)構(gòu)易于理解、維護和擴展,而類型的等級結(jié)構(gòu)非常適合于抽象化的設(shè)計、實現(xiàn)和復(fù)用。模版方法模式則更進了一步:此模式鼓勵恰當?shù)厥褂美^承。此模式可以用來改寫一些擁有相同功能的相關(guān)的類,將可復(fù)用的一般性的行為代碼移到基類里面,而把特殊化的行為代碼移到子類里面。因此,熟悉模版方法模式便成為一個重新學(xué)習繼承的好地方。17.5模版方法模式使用原則將行為盡量移動到結(jié)構(gòu)的高端(抽象類),而將狀態(tài)盡量移動到結(jié)構(gòu)的低端(具體類)。應(yīng)當根據(jù)行為而不是狀態(tài)定義一個類。也就是說,一個類的實現(xiàn)首先建立在行為的基礎(chǔ)之上,而不是建立在狀態(tài)的基礎(chǔ)之上。在實現(xiàn)行為時,是用抽象狀態(tài)(抽象父類或接口)而不是用具體狀態(tài)(具體類)。如果一個行為涉及到對象的狀態(tài)時,使用間接的引用而不是直接的引用,換言之,應(yīng)當使用取值方法而不是直接引用屬性。給操作劃分層次。一個類的行為(反映該類功能/職責的核心方法)應(yīng)當放到一個小組核心方法(KernelMethods)里面,這些方法可以很方便地在子類中加以置換--override。將狀態(tài)屬性的確認推遲到子類中。不要在抽象類中過早地聲明屬性變量,應(yīng)將它們盡量地推遲到子類中去聲明。在抽象父類中,如果需要狀態(tài)屬性的話,可以調(diào)用抽象的取值方法,而將抽象的取值方法的實現(xiàn)放到具體子類中--狀態(tài)變量及其存取方法都應(yīng)該盡量放到子類中。在具體實現(xiàn)方面,被TemplateMethod調(diào)用的虛方法可以具有實現(xiàn),也可以沒有任何實現(xiàn)(抽象方法、純虛方法)。17.6模版方法模式總結(jié)TemplateMethod模式是一種非常基礎(chǔ)性的設(shè)計模式,在面向?qū)ο笙到y(tǒng)中有著大量的應(yīng)用。它用最簡潔的機制(虛函數(shù)的多態(tài)性)為很多應(yīng)用程序框架提供了靈活的擴展,是代碼復(fù)用方面的基本實現(xiàn)結(jié)構(gòu)?!癉on‘tcallme,letmecallyou(不要調(diào)用我,讓我來
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 光的反射(教學(xué)設(shè)計)-2024-2025學(xué)年科學(xué)五年級上冊人教鄂教版
- 2025年甘肅省蘭州市單招職業(yè)適應(yīng)性測試題庫完整版
- 2025年河南女子職業(yè)學(xué)院單招職業(yè)傾向性測試題庫學(xué)生專用
- 2025年湖北生態(tài)工程職業(yè)技術(shù)學(xué)院單招職業(yè)傾向性測試題庫必考題
- 2025年度公司獨家簽約帶貨主播合作協(xié)議
- 寵物醫(yī)院裝修全包合同細則
- 2025年度數(shù)字經(jīng)濟平臺運營人員聘用協(xié)議
- 2025年度美容美發(fā)門店聯(lián)營合作合同
- 農(nóng)村茶藝館裝修合同模板
- 2025年度手房買賣意向金支付與房屋交易風險控制合同
- Unit-3-Reading-and-thinking課文詳解課件-高中英語人教版必修第二冊
- 品牌服裝設(shè)計課件
- 小學(xué)六年級美術(shù)期末試卷及答案課件
- DB11T 381-2023既有居住建筑節(jié)能改造技術(shù)規(guī)程
- NB-T 47013.7-2012(JB-T 4730.7) 4730.7 承壓設(shè)備無損檢測 第7部分:目視檢測
- 統(tǒng)編版高中語文必修下冊 第一單元單元學(xué)習任務(wù) 課件
- 新版出口報關(guān)單模板
- 幼兒園衛(wèi)生保健十三種表格
- 大灰狼兒童睡前故事大全
- 家長進課堂--小學(xué)生食品安全知識
- 酒店預(yù)訂確認單
評論
0/150
提交評論