看板 C_and_CPP 關於我們 聯絡資訊
在FB的靠北工程師看到一篇文 https://goo.gl/u8dTYM 這種語法確實很冗長,然後看到留言有一個回覆說要善用組合模式。 我就很好奇組合模式是什麼,Google了一下,找到這4份網頁, http://www.one-tab.com/page/CRw70YIPR0Ky9az36aOG8Q 每一個都提到leaf、add、remove,但有看沒有懂, 請問有高手能解釋一下組合模式什麼概念嗎? 套用組合模式後,靠北工程師的那份Code又會變成怎樣的? 希望能夠讓我聽懂,200P將奉上給第一位解答者,感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 58.115.109.218 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1474887527.A.E65.html
chuegou: 合成? 09/26 19:01
好像也有稱作合成模式的
Caesar08: 請善用TMP 09/26 19:24
TMP是...?
pttworld: later的考慮switch case的fallthrough,要很小心。 09/26 19:32
組合模式就是改成switch嗎? ※ 編輯: henry8168 (58.115.109.218), 09/26/2016 20:16:55
Caesar08: Template MetaProgramming的簡稱 09/26 20:59
tinlans: 讓全部的東西繼承同一個 base,然後串成樹狀結構而已。 09/26 21:37
tinlans: compiler 的 AST 那類東西一般都能用這種結構做 09/26 21:37
感恩,P幣已送出。繼續討論吧
bluesoul: 直覺想到是多型或是責任鏈 09/26 21:42
tinlans: 至於為什麼這東西可以解那問題,我也想不透 XD 09/26 21:43
bluesoul: 合成模式應該是用來表達層狀結構的 09/26 21:44
tinlans: 這鬼東西,一般的 factory + strategy 和基本多型概念 09/26 21:46
tinlans: 就可以解了,FB 那下面不知道在反串什麼 09/26 21:47
bluesoul: 我也覺得用錯pattern 09/26 21:50
tinlans: 不然就是那個「組合模式」是其它英文的中譯 09/26 21:51
tinlans: 還有其實這算 OOAD 板的範圍,那邊板主很傷心 XD 09/26 21:52
ilikekotomi: 原來有OOAD板!! 等等去看一下 09/26 22:08
descent: 你直接請他給一個 sample code 就好了。 09/26 22:09
descent: 是不是嘴炮馬上就知道了。 09/26 22:09
descent: 解決這問題哪是這麼簡單勞一句話就好。 09/26 22:10
我轉到OOAD板一起問好了,合成模式我查到的也都是樹狀結構相關的東西, 可能是那留言在嘴砲吧XD" 所以那一連串的if else的code,還有不同寫法讓版面繼續縮減嗎? ※ 編輯: henry8168 (58.115.109.218), 09/26/2016 22:33:18 henry8168:轉錄至看板 OOAD 09/26 22:34
Caesar08: ...時間複雜度??? 09/26 22:34
就讓電腦可以比較有效率判斷執行版本的寫法,不用一個一個詢問 @@" ※ 編輯: henry8168 (58.115.109.218), 09/26/2016 22:35:36
Caesar08: 時間複雜度 這個詞通常用在演算法分析 09/26 22:38
抱歉,已修改 ※ 編輯: henry8168 (58.115.109.218), 09/26/2016 22:39:39
Caesar08: 我是不知道那個方法寫起來最好維護,但TMP肯定執行最快 09/26 22:40
我正在看https://goo.gl/vrD71Y 看不太懂 enum { value = N * Factorial<N - 1>::value }; 和一般enum不太一樣?
bluesoul: 如果要快請參考map/hash + factory/command 09/26 22:46
bluesoul: http://tinyurl.com/ngqgddb 09/26 22:47
只用過hash map,還在研究factory/command, 然後switch好像比較被推來取代if else? ※ 編輯: henry8168 (58.115.109.218), 09/26/2016 23:16:14
legendmtg: 怎樣看都不是composite pattern啊 decorator還比較有 09/26 23:16
legendmtg: 可能吧 而且原本的if就有問題了吧.... 09/26 23:16
Caesar08: 一樣 09/26 23:18
我看懂了,原來是template的進階應用XDD,感恩 ※ 編輯: henry8168 (58.115.109.218), 09/26/2016 23:26:28
tinlans: 我比較疑惑的點是,如果 IS_OS_5_OR_LATER 等價於 09/27 03:39
tinlans: ver >= 5 的話,那後面的一大串 else if 到底在幹嘛 XD 09/27 03:39
tinlans: FB 沒交代清楚這點,可能要寫過 iOS 程式的會知道吧。 09/27 03:40
tinlans: 真的等價的話,else 之後判斷 ver < 4 的範圍才有意義。 09/27 03:40
tinlans: 所以我在想,他講的智障是不是更基本層面的問題.. 09/27 03:41
pttworld: 如果不同人不同時期維護同一段程式是有可能的。 09/27 06:53
pttworld: 不敢動邏輯寧可再開一條線出來,copy&paste來改。 09/27 06:54