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
Here are key consequences of the Builder pattern: It lets you vary a product's internal representation. The Builder object provides the director with an abstract interface for constructing the product. The interface lets the builder hide the representation and internal structure of the product.
Builder pattern aims to “Separate the construction of a complex object from its representation so that the same construction process can create different representations.” It is used to construct a complex object step by step and the final step will return the object.
Last, but not least, builders are not thread-safe. While immutable objects can be freely shared between threads, builders cannot because of the mutable state.
In the Real World The simplest real world example of the builder pattern, which most of us are familiar with, is when we make (or order) a pizza. The pizza toppings cannot be added in any random order or the whole thing is likely to come out a mess. Instead, there is a step-by-step process that is followed.
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).
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);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With