小弟最近遇到一个设计上的瓶颈
目前已有架构大致如下
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 支援的方法。
感谢回复!!