**Builder Pattern** A builder pattern is used when you want to create complex objects with many optional parameters and it provides immutability. In the below class we have four parameters to create a user but while creating objects at run time you might have phone number or age or both where first name and last name are required parameters. For this to implement you might be creating too many constructors which does not scale when you have more parameters coming. ``` public class Main { public static void main(String[] args) { System.out.println("Hello World"); User user = new User.UserBuilder("Arihant", "Sai") .age(10) .phone("123455") .build(); System.out.println(user.getString()); } } class User { private final String fName; // required private final String lName; // required private final int age; // optional private final String phone; // optional public User(UserBuilder build) { this.fName = build.fName; this.lName = build.lName; this.age = build.age; this.phone = build.phone; } public String getString() { return this.fName + "," + this.lName + "," + this.age + "," + this.phone; } static class UserBuilder { private final String fName; // required private final String lName; // required private int age; // optional private String phone; // optional public UserBuilder(String fName,String lName) { this.fName = fName; this.lName = lName; } public UserBuilder age(int age) { this.age = age; return this; } public UserBuilder phone(String phone) { this.phone = phone; return this; } public User build() { User user = new User(this); return user; } } } ``` More info: https://howtodoinjava.com/design-patterns/creational/builder-pattern-in-java/