Is there a clean way to use the Builder pattern to build a multi-level tree?
Asked Answered
B

2

5

It seems like the builder pattern is good if you're making some linear chain of things (java's StringBuilder) or creating an object with many properties (PizzaBuilder).

Can it be extended to build a a tree without specifying possibly confusing node locations?

   a
 / | \
c  d  e
     / \
    f   g   

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

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

Or is just not a good idea with this pattern?

Thanks

Broadsword answered 18/2, 2012 at 2:57 Comment(3)
StringBuilder doesn't follow the Builder pattern. The builder pattern "defines an instance for creating an object but letting subclasses decide which class to instantiate".Preliminary
By "builder," do you mean a so-called fluent builder class? If so, this question addresses it somewhat. Of the group, I liked this answer best.Asaasabi
@Jiahua - the quote that you provided is for Factory Method, not Builder (and is found on the inside cover of GoF).Bathhouse
P
2

The Builder pattern is useful for when you have a class with a set of properties, and have predefined types of that class with various sets of properties.

You just want to make a tree:

a.add(c, d, e);
e.add(f, g);
Preliminary answered 18/2, 2012 at 3:6 Comment(0)
B
13

Yes, builder patterns can be used for trees. Each node in the tree needs its own builder instance.

Here's an example with a root and two child nodes.

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

https://sourceforge.net/p/practicalxml/code/HEAD/tree/trunk/src/main/java/net/sf/practicalxml/builder/ (the package.html contains example code).

Bathhouse answered 18/2, 2012 at 13:23 Comment(0)
P
2

The Builder pattern is useful for when you have a class with a set of properties, and have predefined types of that class with various sets of properties.

You just want to make a tree:

a.add(c, d, e);
e.add(f, g);
Preliminary answered 18/2, 2012 at 3:6 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.