




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、裝飾者模式第7章 設計模式實現1類爆炸調料的增加/刪除調料價格的修改7.3 裝飾者模式第7章 設計模式實現2使用實例變量和繼承,跟蹤這些調料7.3 裝飾者模式第7章 設計模式實現27.3 裝飾者模式第7章 設計模式問題:實現cost方法7.3 裝飾者模式第7章 設計模式當哪些因素改變時會影響這個設計?調料價錢的改變會使我們更改現有代碼。一旦出現新的調料,我們就需要加上新的方法,并改變超類中的cost()方法。以后可能會開發出新飲料,對于這些飲料而言(冰茶),某些調料可能并不適合,但是在這個設計方式中,Tea子類仍將繼承那些不合適的方法,比如:hasWhip()。如何顧客想要雙倍摩卡,怎么辦?7
2、.3 裝飾者模式第7章 設計模式設計原則(Open-ClosedPrinciple)類應該對擴展開放,對修改關閉。我們的目標是允許類容易擴展,在不修改現有代碼的情況下,就可搭配新的行為。如能實現這樣的目標,其好處在于:這樣的設計具有彈性,可以應對改變,可以接受新的功能來應對改變的需求。如何讓設計的每個部分都遵循開放-關閉原則?這通常是無法做到的。要讓OO設計同時具有開放性和關閉性,又不修改現有的代碼,需要花費許多時間和努力。一般來說,我們沒有足夠的精力把設計的每個部分都這么設計,這可能只是一種浪費。遵循開放-關閉原則,通常會引入新的抽象層次,增加代碼的復雜度。你需要把注意力集中在設計中最有可能
3、改變的地方,然后應用開放-關閉原則。7.3 裝飾者模式第7章 設計模式星巴克咖啡訂單管理系統使用裝飾者模式以飲料(Beverage)為主體,然后在運行時以調料(Condiment)來裝飾(decorate)飲料比如,顧客想要摩卡和奶泡深焙咖啡,那么:取出一個深焙咖啡(DarkRoast)對象以摩卡(Mocha)對象裝飾它以奶泡(Whip)對象裝飾它調用cost方法,并依賴委托(delegrate)將調料的價格加上去7.3 裝飾者模式第7章 設計模式以DarkRoast對象開始顧客需要摩卡(Mocha),所以建立一個Mocha對象,并用它將DarkRoast對象包起來7.3 裝飾者模式第7章 設
4、計模式顧客也想要奶泡(Whip),所以建立一個Whip裝飾者,并用它將Mocha對象包起來7.3 裝飾者模式第7章 設計模式通過調用最外圈裝飾者(Whip)的cost即可計算飲料價格。7.3 裝飾者模式第7章 設計模式“裝飾者模式”特點裝飾者和被裝飾對象具有相同的超類型可以用一個或多個裝飾者包裝一個對象由于裝飾者和被裝飾對象有相同的超類型,所以在任何需要原始對象(被包裝)的場合,都可以用裝飾過的對象代替她裝飾者可以在所委托被裝飾者的行為之前或之后,加上自己的行為,以達到特定的目的對象可以在任何時候被裝飾,所以可以在運行時動態的、不限量的用需要的裝飾者來裝飾對象裝飾者模式定義裝飾者模式動態地將責
5、任附加到對象上。若要擴展功能,裝飾者提供了比繼承更有彈性的替代方案。7.3 裝飾者模式第7章 設計模式7.3 裝飾者模式第7章 設計模式7.3 裝飾者模式第7章 設計模式問題為什么Decorate類擴展自Component類?裝飾者和被裝飾者必須是一樣的類型,我們在此使用繼承達到“類型匹配”類型匹配意味著裝飾者和被裝飾者具有相同的接口,從而裝飾者可以取代被裝飾者新的行為并不是繼承自超類,而是由組合對象得到,即所有飲料和調料可以更有彈性的加以混合和匹配我們可以在任何時候,實現新的裝飾者增加新的行為。如果依賴繼承,每當需要新行為時,必須修改代碼Component類型可以使用抽象類,也可以使用接口7
6、.3 裝飾者模式第7章 設計模式問題:如果有一張訂單:如果有一張訂單:“雙倍摩卡雙倍摩卡豆漿豆漿奶泡奶泡拿鐵拿鐵咖啡咖啡”,應該如何進行設計?,應該如何進行設計?7.3 裝飾者模式第7章 設計模式Beverage類Condiment類7.3 裝飾者模式第7章 設計模式飲料(被裝飾者)的代碼7.3 裝飾者模式第7章 設計模式飲料(被裝飾者)的代碼7.3 裝飾者模式第7章 設計模式調料(裝飾者)的代碼7.3 裝飾者模式第7章 設計模式測試代碼7.3 裝飾者模式第7章 設計模式測試結果7.3 裝飾者模式第7章 設計模式總結在我們的代碼中,應該允許行為可以被擴展,而無需修改現有的代碼裝飾者模式意味著一
7、群裝飾者類,這些類用來包裝具體組件裝飾者反映出被裝飾者的組件類型(具有相同的類型)裝飾者可以在被裝飾者的行為前面或后面加上自己的行為,甚至將被裝飾者的行為整個取代掉,而達到特定的目的可以用無數個裝飾者包裝一個組件裝飾者一般對組件的客戶是透明的,除非客戶程序依賴于組件的具體類型裝飾者會導致設計中出現許多小對象,如果過度使用,會讓程序變得復雜7.3 裝飾者模式第7章 設計模式問題1星巴克決定在菜單上加上咖啡的容量大小,供顧客選擇小杯(tall)、中杯(grande)、大杯(venti);另外還需要根據咖啡容量收費,比如小中大杯咖啡加上豆漿(Soy),分別加收0.10、0.15、0.20美金。我們應該如何改變裝飾者類應對這樣的需求?7.3 裝飾者模式第7章 設計模式7.3 裝飾者模式第7章 設計模式問題2在裝飾者模式中,是否可以允許裝飾者知道一連串裝飾鏈條中其他裝飾者地存在?比如,我們需要使用getDescription()列出“Whip,DoubleMocha”,而不是“Moc
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山里踏雪活動方案
- 展廳寵物活動方案
- 小紅帽公司活動策劃方案
- 山西省基礎教育活動方案
- 布丁酒店活動方案
- 工作迎新活動方案
- 小學生居家游戲活動方案
- 小柴米充值活動方案
- 盡快落實活動方案
- 師生環保進社區活動方案
- GB/T 31848-2015汽車貼膜玻璃貼膜要求
- 圖書管理系統畢業論文參考文獻精選,參考文獻
- 行政法培訓講義課件
- 中國當代舊體詩選讀幻燈片
- 吉林省全省市縣鄉鎮衛生院街道社區衛生服務中心基本公共衛生服務醫療機構信息名單目錄995家
- 倔強的小紅軍-精講版課件
- 信息隱藏與數字水印課件(全)全書教學教程完整版電子教案最全幻燈片
- 公開招聘社區居委專職工作人員考試筆試、面試題集及相關知識(11套試題含答案)
- 三相負荷(380V)及單相(220V)最大供電距離計算表及電壓降計算表
- 中職數學基礎模塊下冊《等差數列》ppt說課稿
- 計算機網絡專業畢業論文:網上鮮花銷售系統的設計與實現
評論
0/150
提交評論