看板 C_and_CPP 關於我們 聯絡資訊
問題: A B C三個class,彼此沒有繼承關系 A含有很多個B與C (composition) 現在要實作一個演算法,這個演算法大致可分三個步驟: 1. 對A的成員作一些改變 2. 對A中的B的成員作改變 3. 對A中的C的成員作改變 假設我把演算法都寫在class A中 在第2、3步驟時就會有很多 a->getB(i)->BsPublicMethod() a->getC(j)->CsPublicMethod() 根據refactor的原則 反覆出現的a->getB(i) a->getC(j)基本上表示這應該要放在B和C裡面 但如果真的放在B C裡,整個演算法就分散在不同的class 這樣似乎不是很好,哪天如果想到另一個演算法,那BC中不就充滿各種不同演算法?? 請問像這樣的問題是否有既有的design pattern?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.192.162.252
lairrol:多一個 class 叫 cMyAlgorithm 如何? 04/30 18:01
stupid0319:另創一個class把ABC都包進來封裝? 04/30 18:08
loveme00835:B、C 的個數是編譯時期已知的嗎? 04/30 18:12
yauhh:演算法不屬於物件,而是這些物件參與在演算法中. 05/01 09:00
yauhh:如果你把演算法放進A,B或C,那就表示當你有新類別D時,要另外 05/01 09:01
yauhh:做新的演算法. 不過有個pattern是將演算法實作分出來,這樣 05/01 09:02
yauhh:套到不同的物件都OK. 05/01 09:03
DJWS:Strategy ? 05/01 09:18
Arton0306:原本A的角色就有像lairrol大說的cMyAlgorithm 05/01 23:46
Arton0306:不過就像文中說的 會一直去呼叫到B C的method 05/01 23:47
Arton0306:回版大 執行期才知 05/01 23:47
Arton0306:Strategy也不是 如果說我演算法只有一個 但algo code 05/02 00:00
Arton0306:散在各處也怪怪的 05/02 00:03
Arton0306:後來想想 B C是為該algo所生的ds 也許整個演算法在A較好 05/02 00:06
Arton0306:如果有新的演算法 它也不太可能復用B C 05/02 00:06