Thursday, 6 April 2017

Builder Design Pattern - Java

Builder Design Pattern - Java

When the construction of the class contains a large number of argument then this Design Pattern is preferred.

Builder Pattern, as the name suggest, it helps to reduce the complexity in Building Java Object.


public class Person { private String firstname; private String lastname; private String address; private int age; private String city; private String state; public Person(String firstname, String lastname, String address, int age, String city, String state) { super(); this.firstname = firstname; this.lastname = lastname; this.address = address; this.age = age; this.city = city; this.state = state; } }

In the above example, you can see, that the construction of the Person class has 6 arguments and few of them can be optional.

So we can create a new PersonBuilder class which will help to create the Object of the Person class.


public class PersonBuilder { private String firstname; private String lastname; private String address; private int age; private String city; private String state; public PersonBuilder() { } public PersonBuilder setFirstname(String firstname) { this.firstname = firstname; return this; } public PersonBuilder setLastname(String lastname) { this.lastname = lastname; return this; } public PersonBuilder setAddress(String address) { this.address = address; return this; } public PersonBuilder setAge(int age) { this.age = age; return this; } public PersonBuilder setCity(String city) { this.city = city; return this; } public PersonBuilder setState(String state) { this.state = state; return this; } public Person build() { return new Person(firstname, lastname, address, age, city, state); } }

So, now the Person class can be created as below :

If Person is with address and name then it can created as following new PersonBuilder("firstname", "lastname").setAddress("my address").build();

If Person is with state and name then it can created as following new PersonBuilder("firstname", "lastname").setState("guj").build();