java 板


LINE

目前對裝飾者模式產生的原因理解如下: 若以人穿衣服,或是飲料店對飲料加料為例,人跟飲料可以是最上層的父類別 衣服可以有很多種,飲料要加的料也可以有很多種,若是以繼承的方式來給人穿衣服 或是給飲料加料,這樣的話: 人+一種衣服是一種子類別,飲料+一種料也是一種子類別。 這樣的話很多種衣服很多種料,就會有很多種子類別。 更不要說很多種衣服、很多種料各自還可以組合出不同子類別。 所以很明顯,子類別數量會過於龐大。 而且人+一種衣服、飲料+一種料,按照邏輯,衣服跟料都是可選擇的,順序不固定的, 若用繼承方式去擴充人和飲料的話,那就是把穿衣服跟加料的順序寫死。這就完全 不符合人類穿衣或給飲料加料的邏輯,也就是說完全不合理。 這是一個原因。 另一個原因,以麥當勞主餐配副餐,組成套餐為例。主餐配副餐形成套餐, 看似可以用繼承方式來描述,也就是主餐為父類別,套餐繼承主餐類別並加上副餐, 形成子類別。但是 主餐往往不只一種,這樣的話變成有多種主餐,套餐要繼承主餐就會變成是多重繼承。 因此在某些需求下,會變成多重繼承,這是Java程式必須避免的現象。 再來,若是堅持要以繼承來實作以上的例子,繼承可能會有很多層,例如飲料加了 很多料,其實就是子類別有好幾層,下一層類別都包含了上一層類別,這樣的話, 若是要計算「加了很多料的飲料」的價格,計算的method必須層層呼叫到最上層的類別, 取出原始飲料的價格後,又層層返回到最下層的,加了很多料的類別,這樣才能計算出 「加了很多料的飲料」的價格,也就是說類別之間相依性很高,而相依性高正好也是 Java程式必須避免的問題。 ----------------------------------- 所以總結以上的說法,可以歸納出使用繼承來給類別擴充功能,會有三個問題: 1 子類別擴充順序是寫死的,這樣要把所有擴充順序都列出,子類別會過多。 2 單一繼承不能處理所有需求,變成不得不多重繼承。 3 程式之間相依性過高。 ----------------------------------- 為了解決使用繼承來給類別擴充功能,所帶來的三個問題,就希望可以: 針對第1個問題,給類別擴充功能必須可以依需求來調整擴充的順序。 針對第2個問題,做到不使用多重繼承也能做出多重繼承的效果; 而介面正好可以多重實作,所以這裡可以考慮以介面代替類別來進行實作。 針對第3個問題,就是要降低類別之間的相依性,這也可以藉由介面來實現。 於是裝飾者模式,就這樣被設計出來了。 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.165.102 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/java/M.1681643078.A.A30.html
1F:推 brt: 很清楚 04/22 10:41
2F:推 thewindjuei: 感謝分享說明 04/28 12:41







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP