The Builder Pattern
Questions, concerns, credibility checks
There are different ways for the director to obtain the correct builder. The client may supply it, or the director may determine this based on the context of the application, etc… Sometimes another factory is used by the director to accomplish this. These issues must be dealt with on a case-by-case basis, as the nature of the problem domain will dictate what is correct in a given context. Because the different builders operate in sometimes vastly different ways, the performance of each may be inconsistent.
Options in implementation
Builder is typically implemented using other design patterns, Abstract Factor for example, depending on the nature of the sub-system being built. The Director in the Builder hides these details from the rest of the system.
The director can be tested using a Mock of the builder interface. Each individual builder can be tested in a straightforward way, the specifics depending on the nature of the complex object being built. For example, to determine how to test the Composite builder, one would refer to the Composite Pattern.
The builder increases design encapsulation, at the expense of some amount of performance degradation, depending on the nature of the individual builder elements themselves.