简体   繁体   English

在树节点数据中构造和实现聚合(或类似)方法的最佳模式

[英]Best pattern to structure and implement aggregate (or similar) method in tree node data

I have a problem when implementing aggregate (or alike) methods on a hierarchy of tree node data. 在树节点数据的层次结构上实现聚合(或类似)方法时遇到问题。 As can be seen Generics is little bit overused here which is not satisfactory to me, so my question is: is there a better way to implement it (possibly avoiding casts from Object in aggregate methods down the hierarchy) ? 可以看出Generics在这里有点过度使用,这对我来说并不令人满意,所以我的问题是: 有没有更好的方法来实现它(可能避免在层次结构中的聚合方法中使用Object转换)?

Current situation (stripped of unrelated details): 现状(剥离不相关的细节):

public interface AggregableTreeData<T extends AggregableTreeData> {
  void aggregate(T from);   
}

public abstract class FruitTreeData<T extends FruitTreeData<?>> 
      implements AggregableTreeData<T> {

  private BigDecimal size = BigDecimal.ZERO;

  @Override
  public void aggregate(T from) {
    this.size = this.size.add(from.size);
  }
}

public class OrangeTreeData<T extends OrangeTreeData<?>> 
    extends  FruitTreeData<T> {

  private boolean ripened = false;

  @Override
  public void aggregate(T from) {
    this.ripened = this.ripened || from.ripened;
  }
}

Additionally I have a method, performing tree data aggregation, which looks like: 另外我有一个方法,执行树数据聚合,看起来像:

//child.getData() and node.getData() is of type <T extends AggregableTreeData<T>>
void aggregateNode(TreeNode node) {
  for (TreeNode child : node.getChildren()) {
    aggregateNode(child);
    node.getData().aggregate(child.getData());
  }
}

看起来非常像复合模式的工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM