The definition of builder pattern ：
The builder pattern separates the construction of a complex object from its representation , So that the same build process can create different representations , It belongs to the creative design pattern .
For users , Using builder mode, you can get an object simply by specifying the type you need to create , The creation process and details do not need to be understood . According to the definition of builder pattern, it can be simply understood as two meanings .
- Separation of construction and presentation ： Building represents the creation of objects , Represents the behavior of an object 、 Method , That is to separate the creation and behavior of objects （ Corresponding to java In the code , It's actually using interfaces to specify behavior , Then it is built by the concrete implementation class ）.
- Create different representations ： That is to have the same behavior , However, different representations can be constructed due to different behavior order of construction or other reasons .
Application scenario of builder mode ：
- Same method , Different order of execution , It produces different results .
- Multiple components or parts , Can be assembled into objects , But the results are different .
- The product category is very complex , Or different call sequences in the product class produce different results .
- Initializing an object is particularly complex , There are many parameters , And many parameters have default values .
Builder mode UML Class diagram ：
As can be seen from the picture above , The builder model mainly includes 4 To the character ：
- product （Product）： Product class object to create .
- Abstract builder （IBuilder）： The constructor's abstract class , Standardize the creation of various components of product objects , Generally, the specific creation process is implemented by subclasses .
- builder （ConcreteBuilder）： Concrete Builder class , According to the actual business logic , Materialize the creation of various components of an object .
- caller （Director）： The caller does not design specific product information , Only responsible for ensuring that all parts of the object are created completely or in a certain order . In the class diagram ,client The role of the caller .
The builder mode is StringBuilder Application in ：
Let's take a look at the execution results of the following code ：
Adjust the execution results in the next order ：
You'll find that you can achieve different results by adjusting the execution order .
see StringBuilder Source code , Will find StringBuilder Inherit AbstractStringBuilder, So in StringBuilder in , The corresponding product is String object , Abstract builders correspond to AbstractStringBuilder, The builder corresponds to StringBuilder, The caller is
Test Test class , Need the main , The common creator is usually using builder Realize the creation of the final product , however StringBuilder Because it's to create String Object's , So it's called toString, because java Any object converted into a string is toString Method , This is made by agreement .
The difference between builder mode and factory mode :
- The builder pattern pays more attention to the calling order of methods , Factory mode focuses on creating objects .
- The strength of creating objects is different , Builder mode creates complex objects , It's made up of various complicated parts , The factory pattern creates the same objects .
- The focus is different , You just need to create the pattern , The builder pattern is not just about creating objects , Also focus on what parts of the object are made of .
- The builder mode is different according to the order in the construction process , You can create a variety of different objects .
The builder model is a little bit ：
- Good encapsulation , Separation of construction and presentation .
- Good scalability , Construction classes are independent , Decouple to a certain extent .
- Easy to control details , The builder can refine the creation process step by step , It doesn't affect other modules .
Disadvantages of the builder model ：
- You need to create one more IBuilder object .
- If there is a change inside the product , Then the creator should also modify it synchronously , Maintenance costs are high .