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

作者: bill42362 (酒池肉林夜夜生科)   2013-10-11 18:35:15
小弟最近遇到一個設計上的瓶頸
目前已有架構大致如下
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 支援的方法。
感謝回覆!!

Links booklink

Contact Us: admin [ a t ] ucptt.com