




已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
Java設(shè)計模式 2020 2 4 1 軟件學(xué)院宋波 第6章裝飾模式 2020 2 4 2 裝飾模式 別名 包裝器 動態(tài)地給對象添加一些額外的職責(zé) 就功能來說裝飾模式相比生成子類更為靈活 DecoratorPattern AnotherName Wrapper Attachadditionalresponsibilitiestoanobjectdynamically Decoratorsprovideaflexiblealternativetosubclassingforextendingfunctionality 6 1概述 2020 2 4 3 解讀 裝飾模式是動態(tài)地擴展一個對象的功能 而不需要改變原始類代碼的一種成熟模式 在裝飾模式中 具體組件 類和 具體裝飾 類是該模式中的最重要的兩個角色 6 1概述 2020 2 4 4 具體組件類的實例稱作 被裝飾者 具體裝飾類的實例稱為 裝飾者 具體裝飾類需要包含有 具體組件 類的一個實例的引用 以便裝飾 被裝飾者 麻雀類 具體組件類 的實例 被裝飾者 調(diào)用fly 麻雀類的fly方法能飛100米 具體裝飾類的實例 裝飾者 調(diào)用fly 麻雀類 具體組件類 的fly方法能飛100米 裝飾類的elefly方法能飛50米 具體裝飾類的fly方法能飛150米 6 2裝飾模式的結(jié)構(gòu)與使用 2020 2 4 7 裝飾模式的結(jié)構(gòu)中包括四種角色 抽象組件 Component 定義了被裝飾者需要進行 裝飾 的方法 具體組件 ConcreteComponent 是抽象組件的一個子類 具體組件的實例稱作 被裝飾者 裝飾 Decorator 是抽象組件的一個子類 它包含一個抽象組件聲明的變量以保存被裝飾者的引用 具體裝飾 ConcreteDecotator 是裝飾類的一個非抽象子類 它的實例稱作 裝飾者 2020 2 4 8 6 2 1裝飾模式的UML類圖 麻雀的實例 具體裝飾類的實例 裝飾者 調(diào)用fly 麻雀類 具體組件類 的fly方法能飛100米 裝飾類的elefly方法能飛50米 具體裝飾類的fly方法能飛150米 裝飾模式 分析 2020 2 4 11 具體組件和裝飾類都是抽象組件的子類 抽象組件聲明的對象 即可以存放被裝飾者的引用 也可以存放裝飾者的引用 對用戶而言 裝飾者所實現(xiàn)的抽象組件中的方法是 被裝飾者 相應(yīng)方法的改進或修正 2020 2 4 12 6 2 2裝飾模式的結(jié)構(gòu)的描述與使用 假設(shè)系統(tǒng)中有一個Bird抽象類以及Bird類的一個子類Sparrow Sparrow類實現(xiàn)了Bird類的fly方法 使得Sparrow類創(chuàng)建的對象 麻雀 調(diào)用fly方法能連續(xù)飛行100米 現(xiàn)在 用戶需要2只鳥 無論是哪一只 必須分別能連續(xù)飛行150米和200米 2020 2 4 14 6 2 2裝飾模式的結(jié)構(gòu)的描述與使用 1 抽象組件 Bird java 規(guī)定了具體組件要實現(xiàn)的方法publicabstractclassBird publicabstractintfly 2020 2 4 15 2 具體組件 Sparrow java 實現(xiàn)fly方法時 返回值為100米publicclassSparrowextendsBird publicfinalintDISTANCE 100 publicintfly returnDISTANCE 16 3 裝飾 Decorator Decorator java 包含有一個Bird聲明的變量 保存被裝飾者的應(yīng)用publicabstractclassDecoratorextendsBird protectedBirdbird publicDecorator publicDecorator Birdbird this bird bird 17 4 具體裝飾 ConcreteDecotator SparrowDecorator java publicclassSparrowDecoratorextendsDecorator publicfinalintDISTANCE 50 eleFly方法能飛50米SparrowDecorator Birdbird super bird publicintfly intdistance 0 distance bird fly eleFly returndistance privateinteleFly 裝飾者新添加的方法returnDISTANCE 2020 2 4 18 5 應(yīng)用Application java publicclassApplication publicstaticvoidmain Stringargs Applicationclient newApplication Birdsparrow newSparrow sparrow只能飛100米 sprrowDecorator1能飛150米BirdsparrowDecorator1 newSparrowDecorator sparrow sprrowDecorator2能飛200米BirdsparrowDecorator2 newSparrowDecorator sparrowDecorator1 client needBird sparrowDecorator1 client needBird sparrowDecorator2 2020 2 4 19 5 應(yīng)用Application java publicvoidneedBird Birdbird intflyDistance bird fly System out println 這只鳥能飛行 flyDistance 米 sparrowDecorator1對象 調(diào)用fly 委托sparrow調(diào)用fly方法能飛100米 引用裝飾類的elefly方法能飛50米 sparrowDecorator2對象 調(diào)用fly 委托sparrowDecorator1調(diào)用fly方法能飛150米 引用裝飾類的elefly方法能飛200米 2020 2 4 22 Application class 1 2 3 4 Sparrow class 1 6 語義 創(chuàng)建具體組件 被裝飾者 飛行100米 UML語義 繼承 關(guān)系 案例分析 2020 2 4 23 Application class 1 2 3 4 5 語義 創(chuàng)建裝飾類的實例 裝飾者 飛行150米 UML語義 繼承 和 關(guān)聯(lián) 關(guān)系SparrowDecorator class 3 5 Decorator class 5 7 Bird class Sparrow class 案例分析 2020 2 4 25 6 3使用多個裝飾者 由于裝飾類是抽象組件的一個子類 因此裝飾者本身也可以作為一個被裝飾者 這就意味著可以使用多個具體裝飾類來裝飾具體組件的實例 2020 2 4 26 6 3使用多個裝飾者 實例 假如用戶不僅需要能飛行150 200米的鳥 也需要能飛行120米 170米 220米的鳥 此時 不必修改現(xiàn)有的類 只需再添加一個具體裝飾類即可 27 publicclassSparrowDecoratorTwoextendsDecorator publicfinalintDISTANCE 20 SparrowDecoratorTwo Birdbird super bird publicintfly intdistance 0 distance bird fly eleFly returndistance publicinteleFly returnDISTANCE Birdbird1 newSparrowDecoratorTwo newSparrow Birdbird2 newSparrowDecorator bird1 Birdbird3 newSparrowDecorator bird2 2020 2 4 29 6 4裝飾模式與繼承機制 面向?qū)ο蟮幕驹瓌t之一 少用繼承 多用組合 假設(shè)用繼承機制實現(xiàn)設(shè)計 就需要在系統(tǒng)中再添加兩個Bird抽象類的子類 Lark能飛行150米 Swallow能飛行200米 2020 2 4 31 6 4裝飾模式與繼承機制 假設(shè)用戶需求發(fā)生變化 現(xiàn)在用戶又需要一只能飛250米的鳥 而且過一段時間可能又需要能飛行300米的鳥 如果采用繼承機制 就必須修改系統(tǒng) 增加新的子類 這對系統(tǒng)維護是一場災(zāi)難 6 5裝飾模式的優(yōu)點 2020 2 4 32 被裝飾者和裝飾者是松耦合關(guā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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大學(xué)生暑期“三下鄉(xiāng)”社會實踐總結(jié)模版
- 組態(tài)軟件技術(shù)整體教學(xué)設(shè)計-張松枝
- 糖原累積?、鲂偷呐R床護理
- 小米3小米電視發(fā)布會
- 廣西南寧市第四十九中學(xué)2025屆數(shù)學(xué)七下期末綜合測試模擬試題含解析
- 統(tǒng)編版語文一年級上冊1秋天 課件
- 醫(yī)學(xué)生模擬談話技能培訓(xùn)大綱
- 2025年秋學(xué)期初二家長會班主任發(fā)言稿模版
- 2025年民辦學(xué)校審工作總結(jié)模版
- 狂犬病醫(yī)學(xué)發(fā)展史
- 汽機發(fā)電量計算
- 西南交通大學(xué)《行車組織》區(qū)段站工作組織課程設(shè)計(附大圖)
- GB∕T 1457-2022 夾層結(jié)構(gòu)滾筒剝離強度試驗方法
- 康復(fù)治療技術(shù)(康復(fù)養(yǎng)老服務(wù))專業(yè)群建設(shè)方案
- 防止水電站水淹廠房措施研究報告
- 衛(wèi)生監(jiān)督稽查規(guī)范
- 第五章結(jié)型場效應(yīng)晶體管
- 修正責(zé)任準(zhǔn)備金
- 麗聲北極星自然拼讀繪本第一級Uncle Vic‘s Wagon 課件
- authorware7程序設(shè)計制作一個時鐘
- 變速器換擋叉的加工工藝規(guī)程及工裝設(shè)計帶圖紙】
評論
0/150
提交評論