[請益] 這種情況有比 Decorator 更好的模式嗎?

看板OOAD作者 (酒池肉林夜夜生科)時間10年前 (2013/10/11 18:35), 編輯推噓0(002)
留言2則, 2人參與, 最新討論串1/6 (看更多)
小弟最近遇到一個設計上的瓶頸 目前已有架構大致如下 A { methodX(); methodA(); } B { methodX(); methodB(); } C { methodX(); methodC(); } 如上,三個物件有一個名稱相同但實作不同的 methodX() 並分別有名稱不同的 methodA(), methodB(), methodC() 現在希望為這三個物件加上一些可選擇的 methodY(), methodZ(), etc. 並且是在執行期間動態的加上去 1) Decorator pattern: 創造新的 Y, Z 物件為 drcorator,就可以用 new Y(new A()) 來達成 動態附加 methods. 缺點:這樣 Y, Z 物件要把所有的 method[A-C, Z]() 寫進去,以後要 增加 D 物件的話 Y, Z 物件都要修改。 2) Strategy pattern: 將實作不同的 methodX() 和 method[A-C]() 抽出來,創造一個 O 來 接收 strategy[A-C],將 method[YZ]() 用條件式判斷要不要執行 O (strategy){ methodX() { return strategy.methodX(); } methodY() { if(...) return _methodY(); } ... } 缺點:所有要動態加上的 method 都要寫在 O 裡,得到一個超龐大的 O... 請問各位這樣的情況有沒有更好的解決方法? 有查過 mixin pattern 但是在我使用的語言似乎沒有 native 支援的方法。 感謝回覆!! -- 想你的時候 不一定能告訴你 如果不告訴你 也能會意 那我們就是有 真正的默契 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 120.145.188.225

10/11 20:51, , 1F
先不論方法,你想要什麼樣的效果。還沒看很懂。
10/11 20:51, 1F

10/12 00:38, , 2F
抱歉表達不夠清楚,我明天試著寫實際的例子!
10/12 00:38, 2F
文章代碼(AID): #1ILzHeWA (OOAD)
討論串 (同標題文章)
文章代碼(AID): #1ILzHeWA (OOAD)