Java 如何以良好的方式向给定的数据结构添加新方法?
比方说,我们有一个给定的具有树数据结构的外部库。示例:超类Java 如何以良好的方式向给定的数据结构添加新方法?,java,polymorphism,Java,Polymorphism,比方说,我们有一个给定的具有树数据结构的外部库。示例:超类S和子类B1到B5。子类也可能有子类 现在我想为这个数据结构添加一个额外的方法。通常,可以使用多态性来实现它:每个子类实现特定的方法 但是因为我们处理的是外部库,所以不能更改原始类。我想到了两种备选方案: 使用使用instanceof 为每个类创建子类并在其中实现方法 哪种方法是常见的?或者,是否有更好的替代解决方案?使您能够向现有数据结构“添加”新操作。可能会有所帮助。您可以拥有一个从classS扩展而来的decorator类。它还包装
S
和子类B1
到B5
。子类也可能有子类
现在我想为这个数据结构添加一个额外的方法。通常,可以使用多态性来实现它:每个子类实现特定的方法
但是因为我们处理的是外部库,所以不能更改原始类。我想到了两种备选方案:
instanceof
哪种方法是常见的?或者,是否有更好的替代解决方案?使您能够向现有数据结构“添加”新操作。可能会有所帮助。您可以拥有一个从class
S
扩展而来的decorator类。它还包装了一个S
。您可以在decorator中实现您的方法。decorator模式可能会派上用场
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);
…假设数据结构在父级外部公开class@Itay谢谢,这对我来说很好。必须对原始数据结构做一点更改,但可以自由扩展。也许这是一个开源库,您的新方法足够有用,可以作为补丁或拉取请求提交?我认为没有一个正确的答案,与库的现有功能和新方法的性质无关。