java設(shè)計(jì)模式課件chap06.ppt_第1頁(yè)
java設(shè)計(jì)模式課件chap06.ppt_第2頁(yè)
java設(shè)計(jì)模式課件chap06.ppt_第3頁(yè)
java設(shè)計(jì)模式課件chap06.ppt_第4頁(yè)
java設(shè)計(jì)模式課件chap06.ppt_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java設(shè)計(jì)模式 2020 2 4 1 軟件學(xué)院宋波 第6章裝飾模式 2020 2 4 2 裝飾模式 別名 包裝器 動(dòng)態(tài)地給對(duì)象添加一些額外的職責(zé) 就功能來(lái)說(shuō)裝飾模式相比生成子類(lèi)更為靈活 DecoratorPattern AnotherName Wrapper Attachadditionalresponsibilitiestoanobjectdynamically Decoratorsprovideaflexiblealternativetosubclassingforextendingfunctionality 6 1概述 2020 2 4 3 解讀 裝飾模式是動(dòng)態(tài)地?cái)U(kuò)展一個(gè)對(duì)象的功能 而不需要改變?cè)碱?lèi)代碼的一種成熟模式 在裝飾模式中 具體組件 類(lèi)和 具體裝飾 類(lèi)是該模式中的最重要的兩個(gè)角色 6 1概述 2020 2 4 4 具體組件類(lèi)的實(shí)例稱(chēng)作 被裝飾者 具體裝飾類(lèi)的實(shí)例稱(chēng)為 裝飾者 具體裝飾類(lèi)需要包含有 具體組件 類(lèi)的一個(gè)實(shí)例的引用 以便裝飾 被裝飾者 麻雀類(lèi) 具體組件類(lèi) 的實(shí)例 被裝飾者 調(diào)用fly 麻雀類(lèi)的fly方法能飛100米 具體裝飾類(lèi)的實(shí)例 裝飾者 調(diào)用fly 麻雀類(lèi) 具體組件類(lèi) 的fly方法能飛100米 裝飾類(lèi)的elefly方法能飛50米 具體裝飾類(lèi)的fly方法能飛150米 6 2裝飾模式的結(jié)構(gòu)與使用 2020 2 4 7 裝飾模式的結(jié)構(gòu)中包括四種角色 抽象組件 Component 定義了被裝飾者需要進(jìn)行 裝飾 的方法 具體組件 ConcreteComponent 是抽象組件的一個(gè)子類(lèi) 具體組件的實(shí)例稱(chēng)作 被裝飾者 裝飾 Decorator 是抽象組件的一個(gè)子類(lèi) 它包含一個(gè)抽象組件聲明的變量以保存被裝飾者的引用 具體裝飾 ConcreteDecotator 是裝飾類(lèi)的一個(gè)非抽象子類(lèi) 它的實(shí)例稱(chēng)作 裝飾者 2020 2 4 8 6 2 1裝飾模式的UML類(lèi)圖 麻雀的實(shí)例 具體裝飾類(lèi)的實(shí)例 裝飾者 調(diào)用fly 麻雀類(lèi) 具體組件類(lèi) 的fly方法能飛100米 裝飾類(lèi)的elefly方法能飛50米 具體裝飾類(lèi)的fly方法能飛150米 裝飾模式 分析 2020 2 4 11 具體組件和裝飾類(lèi)都是抽象組件的子類(lèi) 抽象組件聲明的對(duì)象 即可以存放被裝飾者的引用 也可以存放裝飾者的引用 對(duì)用戶(hù)而言 裝飾者所實(shí)現(xiàn)的抽象組件中的方法是 被裝飾者 相應(yīng)方法的改進(jìn)或修正 2020 2 4 12 6 2 2裝飾模式的結(jié)構(gòu)的描述與使用 假設(shè)系統(tǒng)中有一個(gè)Bird抽象類(lèi)以及Bird類(lèi)的一個(gè)子類(lèi)Sparrow Sparrow類(lèi)實(shí)現(xiàn)了Bird類(lèi)的fly方法 使得Sparrow類(lèi)創(chuàng)建的對(duì)象 麻雀 調(diào)用fly方法能連續(xù)飛行100米 現(xiàn)在 用戶(hù)需要2只鳥(niǎo) 無(wú)論是哪一只 必須分別能連續(xù)飛行150米和200米 2020 2 4 14 6 2 2裝飾模式的結(jié)構(gòu)的描述與使用 1 抽象組件 Bird java 規(guī)定了具體組件要實(shí)現(xiàn)的方法publicabstractclassBird publicabstractintfly 2020 2 4 15 2 具體組件 Sparrow java 實(shí)現(xiàn)fly方法時(shí) 返回值為100米publicclassSparrowextendsBird publicfinalintDISTANCE 100 publicintfly returnDISTANCE 16 3 裝飾 Decorator Decorator java 包含有一個(gè)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 這只鳥(niǎo)能飛行 flyDistance 米 sparrowDecorator1對(duì)象 調(diào)用fly 委托sparrow調(diào)用fly方法能飛100米 引用裝飾類(lèi)的elefly方法能飛50米 sparrowDecorator2對(duì)象 調(diào)用fly 委托sparrowDecorator1調(diào)用fly方法能飛150米 引用裝飾類(lèi)的elefly方法能飛200米 2020 2 4 22 Application class 1 2 3 4 Sparrow class 1 6 語(yǔ)義 創(chuàng)建具體組件 被裝飾者 飛行100米 UML語(yǔ)義 繼承 關(guān)系 案例分析 2020 2 4 23 Application class 1 2 3 4 5 語(yǔ)義 創(chuàng)建裝飾類(lèi)的實(shí)例 裝飾者 飛行150米 UML語(yǔ)義 繼承 和 關(guān)聯(lián) 關(guān)系SparrowDecorator class 3 5 Decorator class 5 7 Bird class Sparrow class 案例分析 2020 2 4 25 6 3使用多個(gè)裝飾者 由于裝飾類(lèi)是抽象組件的一個(gè)子類(lèi) 因此裝飾者本身也可以作為一個(gè)被裝飾者 這就意味著可以使用多個(gè)具體裝飾類(lèi)來(lái)裝飾具體組件的實(shí)例 2020 2 4 26 6 3使用多個(gè)裝飾者 實(shí)例 假如用戶(hù)不僅需要能飛行150 200米的鳥(niǎo) 也需要能飛行120米 170米 220米的鳥(niǎo) 此時(shí) 不必修改現(xiàn)有的類(lèi) 只需再添加一個(gè)具體裝飾類(lèi)即可 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裝飾模式與繼承機(jī)制 面向?qū)ο蟮幕驹瓌t之一 少用繼承 多用組合 假設(shè)用繼承機(jī)制實(shí)現(xiàn)設(shè)計(jì) 就需要在系統(tǒng)中再添加兩個(gè)Bird抽象類(lèi)的子類(lèi) Lark能飛行150米 Swallow能飛行200米 2020 2 4 31 6 4裝飾模式與繼承機(jī)制 假設(shè)用戶(hù)需求發(fā)生變化 現(xiàn)在用戶(hù)又需要一只能飛250米的鳥(niǎo) 而且過(guò)一段時(shí)間可能又需要能飛行300米的鳥(niǎo) 如果采用繼承機(jī)制 就必須修改系統(tǒng) 增加新的子類(lèi) 這對(duì)系統(tǒng)維護(hù)是一場(chǎng)災(zāi)難 6 5裝飾模式的優(yōu)點(diǎn) 2020 2 4 32 被裝飾者和裝飾者是松耦合關(guān)系 由于裝飾類(lèi)僅僅依賴(lài)于抽象組件 因此具體

溫馨提示

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

評(píng)論

0/150

提交評(píng)論