This pattern is licensed under the CC0 Public Domain Dedication.
Separate the complex construction of an object from its representation.
foo class, on lines 3–16, has a complex construction process
during which any subset of its properties might be set. This
process is captured by the
foo::builder class, on lines 18–36.
This builder class provides an interface for
foo objects, allowing various combinations of
parameters to be provided. This avoids having to define a large
collection of constructors for
foo::builder class implements a set of
chainable functions for setting the construction parameters
(lines 21–24) and a
build member function for constructing the
object with these parameters (lines 26–29).
On lines 40–42, we use
foo::builder to construct a
prop3 members and calling
construct the object.