Builder Pattern
Builder Pattern is used when the increase of object constructor parameter combination leads to an exponential list of constructors. It is a solution to the telescoping constructor anti-pattern.
Let's describe the pattern by using a sample requirement.
Problem:
We need to create a class for a Customer in a Bank and need following attributes in the Customer object.
{Name, Father's Name, Date Of Birth, Mobile, Email, PAN, Permanent Address, Correspondence Address, Account, Branch}
Constraint : Name,Date Of Birth,Account can not be null or empty
There are 10 attributes in the objects So there will be total 2^10(1024) possible constructor and It is not practical to write all required constructors.
One alternative could be to use Setter method but it will not work if any attribute has final modifier and would be difficult to fulfill the constraint that some attributes can not be null or empty.
Now We will see how Builder Design Pattern helps to solve the above problem.The below code is self explanatory, Just read the code and you will understand how builder pattern works.
Java Code Example:
public class Customer { private final String name; private final String fatherName; private final Date dob; private final String mobile; private final String email; private final String pan; private final String permAddress; private final String mailAddress; private final String account; private final String branch; private Customer(String name, String fatherName, Date dob, String mobile, String email, String pan,String permAddress, String mailAddress, String account, String branch) { this.name = name; this.fatherName = fatherName; this.dob = dob; this.mobile = mobile; this.email = email; this.pan = pan; this.permAddress = permAddress; this.mailAddress = mailAddress; this.account = account; this.branch = branch; } public static class Builder { private String name; private String fatherName; private Date dob; private String mobile; private String email; private String pan; private String permAddress; private String mailAddress; private String account; private String branch; public Builder withName(final String name) { this.name = name; return this; } public Builder withFatheName(final String fatherName) { this.fatherName = fatherName; return this; } public Builder withDob(final Date dob) { this.dob = dob; return this; } public Builder withMobile(final String mobile) { this.mobile = mobile; return this; } public Builder withEmail(final String email) { this.email = email; return this; } public Builder withPan(final String pan) { this.pan = pan; return this; } public Builder withPermAddress(final String permAddress) { this.permAddress = permAddress; return this; } public Builder withMailAddress(final String mailAddress) { this.mailAddress = mailAddress; return this; } public Builder withAccount(final String account) { this.account = account; return this; } public Builder withBranch(final String branch) { this.branch = branch; return this; } public Customer build() { // Check Object Constraint if (name == null || dob == null || account == null) { throw new IllegalStateException("Cannot create Customer"); } // Instantiate Customer Object return new Customer(name, fatherName, dob, mobile, email, pan, permAddress, mailAddress, account, branch); } } }
Comments
Post a Comment