Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Use the Builder pattern when
- the algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled
- the construction process must allow different representations for the object that's constructed
Real world examples
- java.nio.ByteBuffer as well as similar buffers such as FloatBuffer, IntBuffer and so on.
- All implementations of java.lang.Appendable
- Apache Camel builders