有没有一种干净的方法来使用Builder模式来构建多级树?

时间:2012-02-18 02:57:03

标签: java tree builder-pattern

如果您正在构建一些线性链(java的StringBuilder)或创建具有许多属性的对象(PizzaBuilder),那么构建器模式似乎很好。

是否可以扩展为构建树而不指定可能混淆的节点位置?

   a
 / | \
c  d  e
     / \
    f   g   

  TreeBuilder tb.addNode(levelNumber, parentNumber, nodeName) // I think this is terrible

  tb.addNode(2, 3, g)  //terrible

或者这种模式不是一个好主意?

由于

2 个答案:

答案 0 :(得分:9)

是的,构建器模式可用于树。树中的每个节点都需要自己的构建器实例。

这是一个带有根和两个子节点的例子。

Tree t = new TreeBuilder()
         .addNode(new TreeBuilder()
                  .addNode("foo")
                  .addNode("bar")
                  .toTree())
         .toTree()

这是一个真实世界的例子,用于构建XML:http://practicalxml.svn.sourceforge.net/viewvc/practicalxml/trunk/src/main/java/net/sf/practicalxml/builder/(package.html包含示例代码)。

答案 1 :(得分:2)

当您拥有一组具有一组属性的类时,Builder模式非常有用,并且该类具有该类具有各种属性的预定义类型。

你只想做一棵树:

a.add(c, d, e);
e.add(f, g);