Builder Pattern

Builder Pattern Java Design Pattern Tutorial
Builder Pattern:is to find a solution to the telescoping constructor. The telescoping constructor anti-pattern occurs when the increase of object constructor parameter combination leads to an exponential list of constructors. Instead of using numerous constructors, the builder pattern uses another object, a builder that receives each initialization parameter step by step and then returns the resulting constructed object at once.

Example

Account.java
package com.builderpattern.example;

public class Account {
 // Mandatory Field
 private int accountNo;
 // Mandatory Field
 private String accountName;
 // Optional Field
 private String lastName;
 // Optional Field
 private int faxNo;

 private Account(AccountBuilder accountBuilder) {
  this.accountNo = accountBuilder.accountNo;
  this.accountName = accountBuilder.accountName;
  this.lastName = accountBuilder.lastName;
  this.faxNo = accountBuilder.faxNo;
 }

 public int getAccountNo() {
  return accountNo;
 }

 public String getFirstName() {
  return accountName;
 }

 public String getLastName() {
  return lastName;
 }

 public int getFaxNo() {
  return faxNo;
 }

 public String toString() {
  StringBuilder accountDetails = new StringBuilder();
  accountDetails.append("Account created Successfully with Acccount No ");
  accountDetails.append(accountNo);
  accountDetails.append(" and  Account Name ");
  accountDetails.append(accountName);
  accountDetails.append(" and  Account lastName ");
  accountDetails.append(lastName);
  accountDetails.append(" faxNo ");
  accountDetails.append(faxNo);
  return accountDetails.toString();
 }

 public static class AccountBuilder {
  private int accountNo;
  private String accountName;
  private String lastName;
  private int faxNo;

  // Mandatory Field are set using constructor
  public AccountBuilder(int accountNo, String accountName) {
   this.accountNo = accountNo;
   this.accountName = accountName;
  }

  // Optional Field are set using method
  public AccountBuilder setlastName(String lastName) {
   this.lastName = lastName;
   return this;
  }

  // Optional Field are set using method
  public AccountBuilder setfaxNo(int faxNo) {
   this.faxNo = faxNo;
   return this;
  }

  public Account build() {
   return new Account(this);
  }

 }

}
AccountTestDrive.java
package com.builderpattern.example;

public class AccountTestDrive {
 public static void main(String[] args) {
  //Mandatory fields are set using Constructor and thus avoiding telescoping Constructor
  Account account = new Account.AccountBuilder(123456,"XYZ").build();
  System.out.println(account);
  
  //Setting optional Fields
  Account account2 = new Account.AccountBuilder(123457,"XYC").setfaxNo(854555).build();
  System.out.println(account2);
 }
}



Home

No comments:

Post a Comment