Mega Code Archive

 
Categories / Java Tutorial / Design Pattern
 

Builder pattern

import java.util.LinkedList; import java.util.List; public class BuilderDemo {   public static void main(String[] args) {     HouseBuilder builder = new SimpleHouseBuilder();     HouseBuildingCompany houseBuildingCompany = new HouseBuildingCompany();     House house = houseBuildingCompany.build(builder);     System.out.println(house);   } } interface HouseBuilder {   void buildBasement();   void buildWalls();   void buildRoof();   House getHouse(); } class HouseBuildingCompany {   public House build(HouseBuilder builder) {     builder.buildBasement();     builder.buildWalls();     builder.buildRoof();     return builder.getHouse();   } } class SimpleHouseBuilder implements HouseBuilder {   private House house;   public SimpleHouseBuilder() {     this.house = new House();   }   public void buildBasement() {     this.house.setBasement(new Basement());   }   public void buildWalls() {     for (int i = 0; i < 4; i++)       this.house.addWall(new Wall());   }   public void buildRoof() {     this.house.setRoot(new Roof());   }   public House getHouse() {     return this.house;   } } class Basement {   @Override   public String toString() {     return "Basement";   } } class Wall {   @Override   public String toString() {     return "Wall";   } } class Roof {   @Override   public String toString() {     return "Roof";   } } class House {   private Basement basement;   private List<Wall> walls;   private Roof roof;   public House() {     this.walls = new LinkedList<Wall>();   }   public void addWall(Wall wall) {     this.walls.add(wall);   }   public void setRoot(Roof roof) {     this.roof = roof;   }   public void setBasement(Basement basement) {     this.basement = basement;   }   @Override   public String toString() {     return "House {" + this.basement + ", " + this.walls + ", " + this.roof + "}";   } }