資源描述:
《軟件設(shè)計模式ch3 - 裝飾者模式.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、軟件設(shè)計方法及設(shè)計模式張聚禮副教授/系統(tǒng)分析師裝飾者模式3一二三四五六星巴茲咖啡認識裝飾者模式裝飾者模式裝飾飲料真實世界的裝飾者:JavaI/O編寫自己的JavaI/O裝飾者主要內(nèi)容一、星巴茲咖啡概況飲料類調(diào)整(一)(二)(三)效果(四)開放-關(guān)閉原則(五)星巴茲是以擴展迅速而聞名的咖啡店,其原始設(shè)計如下:(一)概況(二)飲料類很明顯,設(shè)計了太多的類(二)飲料類從Beverage類開始,添加實例變量(三)調(diào)整加入子類(三)調(diào)整(三)調(diào)整(四)效果(四)效果設(shè)計原則五:類應(yīng)該對擴展開放,對修改關(guān)閉。(五)開放-關(guān)閉原則(五)開放-關(guān)閉原則二、認識裝飾者模式思
2、路構(gòu)造飲料訂單(一)(二)以飲料為主體,運行時以調(diào)料來“裝飾”飲料,例如,顧客想要摩卡和奶泡深焙咖啡:取一個深焙咖啡對象以摩卡對象裝飾它以奶泡對象裝飾它調(diào)用cost()方法,并依賴委托將調(diào)料的價錢加上去。(一)思路(二)構(gòu)造飲料訂單(二)構(gòu)造飲料訂單(二)構(gòu)造飲料訂單(二)構(gòu)造飲料訂單三、裝飾者模式定義類圖缺點(一)(二)(三)(一)定義裝飾者模式:動態(tài)地將責任加到對象身上。如果要擴展功能,裝飾者模式提供了比繼承更有彈性的替代方案。(二)類圖(三)缺點有時在設(shè)計中加入大量的小類,變得不容易理解。有的客戶端代碼依賴于特定的類型(這是個比較糟糕的習(xí)慣,違反了“
3、針對接口編程,而不是針對實現(xiàn)編程”的設(shè)計原則),當服務(wù)器端引入裝飾者模式時,客戶端就會出現(xiàn)狀況。裝飾者模式使得實例化組件的復(fù)雜度提升。四、裝飾飲料星巴茲飲料實現(xiàn)(一)(二)(一)星巴茲飲料從Beverage類開始(二)實現(xiàn)Beverage類很簡單,下面來實現(xiàn)CondimentDecorator調(diào)料類(二)實現(xiàn)編寫飲料代碼(二)實現(xiàn)編寫飲料代碼(續(xù))(二)實現(xiàn)編寫調(diào)料代碼(二)實現(xiàn)編寫測試代碼(二)實現(xiàn)RUN(二)實現(xiàn)(二)實現(xiàn)五、真實世界的裝飾者:JavaI/O典型實例裝飾java.io類(一)(二)(一)典型實例(二)裝飾java.io類六、編寫自己的J
4、avaI/O裝飾者編寫自己的JavaI/O裝飾者測試新的JavaI/O裝飾者(一)(二)(一)編寫自己的JavaI/O裝飾者(一)編寫自己的JavaI/O裝飾者(二)測試新的JavaI/O裝飾者(二)測試新的JavaI/O裝飾者RUN七、總結(jié)AbstractionEncapsulationPolymorphismInheritanceEncapsulatewhatvaries.Favorcompositionoverinheritence.Programtointerfaces,notimplementations.Strategy-definesafam
5、ilyofalgorithms,encapsulateseachone,andmakestheminterchangeable.Strategyletsthealgorithmvaryindependentlyfromclientsthatuseit.總結(jié)OOBasicsOOPrinciplesOOPatterns1Observer-definesaone-to-manydependencybetweenobjectssothatwhenoneobjectchangesstate,allitsdependentsarenotifiedandupdateda
6、utomatically總結(jié)OOPatternsStriveforlooselycoupleddesignsbetweenobjectsthatinteract.OOPrinciples2Decorator-Attachadditionalresponsibilitiestoanobjectdynamically.Decoratorsprovideaflexiblealternativetosubclassingforextendingfunctionality.總結(jié)OOPatternsClassesshouldbeopenforextensionbutc
7、losedformodification.OOPrinciples3