如果您正在构建一些线性链(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
或者这种模式不是一个好主意?
由于
答案 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);