Builder
From CSSEMediaWiki
Revision as of 23:50, 6 October 2008 by Elliot Fisher (Talk | contribs)
The Builder pattern allows you to use the same construction process to create different representations of a complex object, and makes it easy to extend more representations in the future.
Contents |
Use when
- There need to be different representations of the object to be constructed
- The creation algorithm should be independent of the parts of the object and how they are assembled
Structure
From the Gang of Four Design Patterns book:
Builder
- Abstract interface which defines methods for constructing each part of a Product
ConcreteBuilder
- Implements the methods for constructing each part of the Product
- Defines the process by which the Product is assembled
- Defines and tracks the created product
- Provides an interface to retrieve the product
Director
- Uses the Builder interface to construct an object
Product
- The complex object under construction
- A class for each part of the Product, and interfaces for assembling the parts
Collaborations
- The client creates a Director, configures it with desired ConcreteBuilder.
- Director tells the Builder to build parts of the Product
- Builder creates the parts and adds them to the Product
- Client retrieves product from Builder
Example
From the Gang of Four Design Patterns book:
A classic example is for a RTF (Rich Text Format) reader, which is able to convert the RTF text to a variety of text formats (ASCII, TeX, etc). Using the builder allows new text formats to be easily added later. It separates the RTF parser algorithm from the creation and representation of the converted format.
Consequences
- A Products internal representation can be varied, the Director only knows about the abstract Builder class
- Construction and representation code are separated, supports encapsulation. Different Directors can build Product variants from the same set of parts.
- Constructs a Product step by step, giving greater control over the construction compared to other creational patterns.