小弟最近遇到一個設計上的瓶頸
目前已有架構大致如下
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 支援的方法。
感謝回覆!!
--
想你的時候 不一定能告訴你
如果不告訴你 也能會意
那我們就是有 真正的默契
--