[問題] 複雜演算法的架構

看板C_and_CPP作者 (Ar藤)時間12年前 (2012/04/30 17:58), 編輯推噓2(2013)
留言15則, 6人參與, 最新討論串1/1
問題: 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

04/30 18:01, , 1F
多一個 class 叫 cMyAlgorithm 如何?
04/30 18:01, 1F

04/30 18:08, , 2F
另創一個class把ABC都包進來封裝?
04/30 18:08, 2F

04/30 18:12, , 3F
B、C 的個數是編譯時期已知的嗎?
04/30 18:12, 3F

05/01 09:00, , 4F
演算法不屬於物件,而是這些物件參與在演算法中.
05/01 09:00, 4F

05/01 09:01, , 5F
如果你把演算法放進A,B或C,那就表示當你有新類別D時,要另外
05/01 09:01, 5F

05/01 09:02, , 6F
做新的演算法. 不過有個pattern是將演算法實作分出來,這樣
05/01 09:02, 6F

05/01 09:03, , 7F
套到不同的物件都OK.
05/01 09:03, 7F

05/01 09:18, , 8F
Strategy ?
05/01 09:18, 8F

05/01 23:46, , 9F
原本A的角色就有像lairrol大說的cMyAlgorithm
05/01 23:46, 9F

05/01 23:47, , 10F
不過就像文中說的 會一直去呼叫到B C的method
05/01 23:47, 10F

05/01 23:47, , 11F
回版大 執行期才知
05/01 23:47, 11F

05/02 00:00, , 12F
Strategy也不是 如果說我演算法只有一個 但algo code
05/02 00:00, 12F

05/02 00:03, , 13F
散在各處也怪怪的
05/02 00:03, 13F

05/02 00:06, , 14F
後來想想 B C是為該algo所生的ds 也許整個演算法在A較好
05/02 00:06, 14F

05/02 00:06, , 15F
如果有新的演算法 它也不太可能復用B C
05/02 00:06, 15F
文章代碼(AID): #1Fdc96vr (C_and_CPP)