让我们说,我们有一个具有树数据结构的给定外部库。示例:超类S
,子类为B1
到B5
。子类也可以有子类。
现在我想为这个数据结构添加一个额外的方法。通常,人们可以通过使用多态来实现它:每个子流实现特定的方法。
但是因为我们处理外部库,所以我们无法更改原始类。我脑子里有两种替代解决方案:
instanceof
哪种方法是常见的情况?或者,是否有更好的替代解决方案?
答案 0 :(得分:3)
Decorator Design Pattern可能有所帮助。您可以拥有一个从类S
扩展的装饰器类。它也包裹S
。您可以在装饰器中实现您的方法。
答案 1 :(得分:1)
Visitor Design Pattern使您能够向现有数据结构“添加”新操作。
答案 2 :(得分:1)
装饰者模式可能派上用场
class S2 extends S {
S s;
S2(S s) {
this.s = s;
}
// delegate method calls to wrapped B1-B5 instance
@Override
void oldMethod1() {
s.oldMethod1();
}
...
// add new methods
void newMetod1() {
...
}
}
然后将其用作
new S2(new B1());
或现有的B1实例
new S2(b1);