Tuesday, 9 October 2018

Builder pattern


  • The Builder is a design pattern designed to provide a flexible solution to various object creation problems in object-oriented programming. 
  • The intent of the Builder design pattern is to separate the construction of a complex object from its representation.
  • The Builder design pattern solves problems like
    • Create different representations of a complex object
    • Creating a complex object be simplified
sasasasasasasa
/** * Represents the product created by the builder. */ class Car { private int wheels; private String color; public Car() { } public String getColor() { return color; } public void setColor(final String color) { this.color = color; } public int getWheels() { return wheels; } public void setWheels(final int wheels) { this.wheels = wheels; } @Override public String toString() { return "Car [wheels = " + wheels + ", color = " + color + "]"; } } /** * The builder abstraction. */ interface CarBuilder { Car build(); CarBuilder setColor(final String color); CarBuilder setWheels(final int wheels); } class CarBuilderImpl implements CarBuilder { private Car car; public CarBuilderImpl() { car = new Car(); } @Override public Car build() { return car; } @Override public CarBuilder setColor(final String color) { car.setColor(color); return this; } @Override public CarBuilder setWheels(final int wheels) { car.setWheels(wheels); return this; } } public class CarBuildDirector { private CarBuilder builder; public CarBuildDirector(final CarBuilder builder) { this.builder = builder; } public Car construct() { return builder.setWheels(4) .setColor("Red") .build(); } public static void main(final String[] arguments) { final CarBuilder builder = new CarBuilderImpl(); final CarBuildDirector carBuildDirector = new CarBuildDirector(builder); System.out.println(carBuildDirector.construct()); } }
  • Steps:
    • Create car builder interface
    • Car builder implementation
      • Create car object in constructor and use this object for all car object manipulation like buildCar, setCarColour ,setCarWheel etc
    • Create CarBuildDirector class with
      • initiate car builder object
      • create car using car builder methods like below
        • car builder.buildcar.setWheels(2).setColor("Red")
  • Advantages
    • Allows you to vary a product’s internal representation.
    • Encapsulates code for construction and representation.
    • Provides control over steps of construction process.
  • Disadvantages
    • Requires creating a separate ConcreteBuilder for each different type of product.
    • Requires the builder classes to be mutable.
    • Data members of class aren't guaranteed to be initialized.
    • Dependency injection may be less supported.



No comments:

Post a Comment

Search This Blog

Contact us

Name

Email *

Message *