[問題] 組合模式(Composite Pattern)到底是什麼

作者: henry8168 (番薯猴)   2016-09-26 18:58:41
在FB的靠北工程師看到一篇文
https://goo.gl/u8dTYM
這種語法確實很冗長,然後看到留言有一個回覆說要善用組合模式。
我就很好奇組合模式是什麼,Google了一下,找到這4份網頁,
http://www.one-tab.com/page/CRw70YIPR0Ky9az36aOG8Q
每一個都提到leaf、add、remove,但有看沒有懂,
請問有高手能解釋一下組合模式什麼概念嗎?
套用組合模式後,靠北工程師的那份Code又會變成怎樣的?
希望能夠讓我聽懂,200P將奉上給第一位解答者,感激不盡
作者: chuegou (chuegou)   2016-09-26 19:01:00
合成?
作者: Caesar08 (Caesar)   2016-09-26 19:24:00
請善用TMP
作者: pttworld (批踢踢世界)   2016-09-26 19:32:00
later的考慮switch case的fallthrough,要很小心。
作者: Caesar08 (Caesar)   2016-09-26 20:59:00
Template MetaProgramming的簡稱
作者: tinlans ( )   2016-09-26 21:37:00
讓全部的東西繼承同一個 base,然後串成樹狀結構而已。compiler 的 AST 那類東西一般都能用這種結構做
作者: bluesoul (忙死你老爸)   2016-09-26 21:42:00
直覺想到是多型或是責任鏈
作者: tinlans ( )   2016-09-26 21:43:00
至於為什麼這東西可以解那問題,我也想不透 XD
作者: bluesoul (忙死你老爸)   2016-09-26 21:44:00
合成模式應該是用來表達層狀結構的
作者: tinlans ( )   2016-09-26 21:46:00
這鬼東西,一般的 factory + strategy 和基本多型概念就可以解了,FB 那下面不知道在反串什麼
作者: bluesoul (忙死你老爸)   2016-09-26 21:50:00
我也覺得用錯pattern
作者: tinlans ( )   2016-09-26 21:51:00
不然就是那個「組合模式」是其它英文的中譯還有其實這算 OOAD 板的範圍,那邊板主很傷心 XD
作者: ilikekotomi (Young)   2016-09-26 22:08:00
原來有OOAD板!! 等等去看一下
作者: descent (「雄辯是銀,沉默是金」)   2016-09-26 22:09:00
你直接請他給一個 sample code 就好了。是不是嘴炮馬上就知道了。解決這問題哪是這麼簡單勞一句話就好。
作者: Caesar08 (Caesar)   2016-09-26 22:34:00
...時間複雜度???時間複雜度 這個詞通常用在演算法分析我是不知道那個方法寫起來最好維護,但TMP肯定執行最快
作者: bluesoul (忙死你老爸)   2016-09-26 22:46:00
如果要快請參考map/hash + factory/commandhttp://tinyurl.com/ngqgddb
作者: legendmtg (CLANNAD)   2016-09-26 23:16:00
怎樣看都不是composite pattern啊 decorator還比較有可能吧 而且原本的if就有問題了吧....
作者: Caesar08 (Caesar)   2016-09-26 23:18:00
一樣
作者: tinlans ( )   2016-09-27 03:39:00
我比較疑惑的點是,如果 IS_OS_5_OR_LATER 等價於ver >= 5 的話,那後面的一大串 else if 到底在幹嘛 XDFB 沒交代清楚這點,可能要寫過 iOS 程式的會知道吧。真的等價的話,else 之後判斷 ver < 4 的範圍才有意義。所以我在想,他講的智障是不是更基本層面的問題..
作者: pttworld (批踢踢世界)   2016-09-27 06:53:00
如果不同人不同時期維護同一段程式是有可能的。不敢動邏輯寧可再開一條線出來,copy&paste來改。

Links booklink

Contact Us: admin [ a t ] ucptt.com