What is the Builder Pattern?
The Builder Pattern is a creational design pattern that allows you to construct complex objects step by step. It separates the construction logic of an object from its representation, enabling the same construction process to create different representations of the object.
❗ Problem:
When a class has:
-
Many constructor parameters (some required, some optional),
-
Or, needs multiple constructors (telescoping constructors),
-
Or, requires a lot of logic for proper setup,
…it becomes hard to manage, read, and extend.
💡 Solution:
The Builder Pattern helps:
-
Avoid long constructors with many parameters.
-
Allow incremental construction using method chaining.
-
Provide a clear separation of concerns between object creation and usage.
Builder in Real-World APIs
-
Java:
StringBuilder
,StringBuffer
,Stream.Builder
,Calendar.Builder
-
Lombok:
@Builder
annotation to generate builders automatically. -
Jackson / Gson: Often use builders when deserializing complex JSON.
-
Effective Java (Joshua Bloch): Recommends Builder over telescoping constructors.
package builderdesignpattern;
public class Person {
// Required Fields
private String firstName;
private String lastName;
// optional field.
private int age;
private String email;
private Person(Builder builder) {
super();
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.email = builder.email;
}
public static class Builder {
private String firstName;
private String lastName;
private int age;
private String email;
public Builder(String firstName, String lastName) {
super();
this.firstName = firstName;
this.lastName = lastName;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setEmail(String email) {
this.email = email;
return this;
}
public Person build() {
return new Person(this);
}
}
@Override
public String toString() {
return "Person [firstName=" + firstName + ", lastName=" + lastName + ", age=" + age + ", email=" + email + "]";
}
}
package builderdesignpattern;
public class Main {
public static void main(String[] args) {
Person p1 = new Person.Builder("Govind", "Khan")
.setAge(35)
.setEmail("Govindkhan@gmail.com")
.build();
System.out.println(p1);
}
}
o/P :
Person [firstName=Govind, lastName=Khan, age=35, email=Govindkhan@gmail.com]
No comments:
Post a Comment