diff --git a/README.md b/README.md
index 9e0034c..0e45575 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,29 @@
-# DesignPatternsJava9
-This repo consists Gang of Four Design patterns code on Java 9. Each branch in the repository has code of 1 design pattern. Switch repository to try out different design patterns.
+# What is Builder Design Pattern 
+* The Builder pattern is a GOF Creational design pattern. Builder pattern hide the complexity of object creation.It Encapsulates creating and assembling the parts of a complex object in a separate Builder object.
+* A class delegates object creation to a Builder object instead of creating the objects directly.
+
+## Diagram
+![Diagram](https://github.com/premaseem/DesignPatternsJava9/blob/builder/diagrams/3.3%20Builder%20Design%20pattern.png "Diagram")
+
+### When to use Builder Design Pattern 
+When application needs to create complex objects with mutliple steps involved in creation and expect final object as outcome.
+
+### Learn Design Patterns with Java by Aseem Jain
+This repository contains working project code used in video Course by Packt Publication with title "Learn Design Patterns with Java " authored by "Aseem Jain".
+
+### Course link: 
+https://www.packtpub.com/application-development/learn-design-patterns-java-9-video
+
+### ![ http://in.linkedin.com/in/premaseem](https://github.com/premaseem/DesignPatternsJava9/blob/master/linkedin.png "http://in.linkedin.com/in/premaseem") Profile:  http://in.linkedin.com/in/premaseem
+
+### Authors blog on design patterns:
+https://premaseem.wordpress.com/category/computers/design-patterns/
+
+### Software Design pattern community face book page:
+https://www.facebook.com/DesignPatternGuru/
+
+### Note: 
+* This code base will work on Java 9 and above versions. 
+* `diagrams` folders carry UML diagrams.
+* `pattern` folder has code of primary example. 
+* `patternBonus` folder has code of secondary or bonus example.
diff --git a/diagrams/3.3 Builder Design pattern.png b/diagrams/3.3 Builder Design pattern.png
new file mode 100644
index 0000000..a831d23
Binary files /dev/null and b/diagrams/3.3 Builder Design pattern.png differ
diff --git a/pattern/src/com/premaseem/Client.java b/pattern/src/com/premaseem/Client.java
index 15f05df..17f964e 100644
--- a/pattern/src/com/premaseem/Client.java
+++ b/pattern/src/com/premaseem/Client.java
@@ -1,13 +1,25 @@
 package com.premaseem;
 
+import com.premaseem.builder.House;
+import com.premaseem.builder.OneBedroomHouseBuilder;
+import com.premaseem.builder.TwoBedroomHouseBuilder;
+import com.premaseem.director.Architect;
+
 /*
 @author: Aseem Jain
 @title: Design Patterns with Java 9
 @link: https://premaseem.wordpress.com/category/computers/design-patterns/
-@copyright: 2018 Packt Publication
 */
 public class Client {
     public static void main (String[] args) {
-        System.out.println("Singleton cook example ");
+        System.out.println("Builder Design pattern example ");
+        Architect architect = new Architect();
+
+        // Hiding complexity and building one bed room house
+        architect.setHouseBuilder(new OneBedroomHouseBuilder());
+        architect.buildHouse();
+        House house = architect.getFinishedHouse();
+        System.out.println(house);
+
     }
 }
diff --git a/pattern/src/com/premaseem/builder/House.java b/pattern/src/com/premaseem/builder/House.java
new file mode 100644
index 0000000..799981a
--- /dev/null
+++ b/pattern/src/com/premaseem/builder/House.java
@@ -0,0 +1,32 @@
+package com.premaseem.builder;
+
+import com.premaseem.room.Room;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+/* "Product" */
+public class House {
+    List<Room> rooms = new ArrayList<>();
+    private String exteriorColor = "while";
+
+    public String getExteriorColor () {
+        return exteriorColor;
+    }
+
+    public void setExteriorColor (String exteriorColor) {
+        this.exteriorColor = exteriorColor;
+    }
+
+    @Override
+    public String toString () {
+        System.out.println("house has total rooms " + rooms.size());
+        System.out.println("house has color " + getExteriorColor());
+        return "";
+    }
+}
diff --git a/pattern/src/com/premaseem/builder/HouseBuilder.java b/pattern/src/com/premaseem/builder/HouseBuilder.java
new file mode 100644
index 0000000..1243c45
--- /dev/null
+++ b/pattern/src/com/premaseem/builder/HouseBuilder.java
@@ -0,0 +1,39 @@
+package com.premaseem.builder;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+/* "Abstract Builder" */
+public abstract class HouseBuilder {
+    public House getHouse () {
+        return house;
+    }
+
+    private House house =null;
+
+    public HouseBuilder(){
+     house = new House();
+   }
+
+    public abstract void addRooms();
+
+    public void addSecuritySystem(){
+        System.out.println("adding security system");
+    }
+
+    public void addPlumbingSystem(){
+        System.out.println("adding plumbing system");
+    }
+
+    public void addAirConditionerSystem(){
+        System.out.println("adding air conditioning system");
+    }
+
+    public void paintHouse(String color){
+        System.out.println("paiting house with color " + color);
+        house.setExteriorColor(color);
+    }
+
+}
diff --git a/pattern/src/com/premaseem/builder/OneBedroomHouseBuilder.java b/pattern/src/com/premaseem/builder/OneBedroomHouseBuilder.java
new file mode 100644
index 0000000..2fb4fdf
--- /dev/null
+++ b/pattern/src/com/premaseem/builder/OneBedroomHouseBuilder.java
@@ -0,0 +1,22 @@
+package com.premaseem.builder;
+
+import com.premaseem.room.BathRoom;
+import com.premaseem.room.BedRoom;
+import com.premaseem.room.LivingRoom;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+
+/* "ConcreteBuilder" */
+public class OneBedroomHouseBuilder extends HouseBuilder{
+
+    @Override
+    public void addRooms () {
+        getHouse().rooms.add(new BathRoom());
+        getHouse().rooms.add(new BedRoom());
+        getHouse().rooms.add(new LivingRoom());
+    }
+}
diff --git a/pattern/src/com/premaseem/builder/TwoBedroomHouseBuilder.java b/pattern/src/com/premaseem/builder/TwoBedroomHouseBuilder.java
new file mode 100644
index 0000000..8a671b1
--- /dev/null
+++ b/pattern/src/com/premaseem/builder/TwoBedroomHouseBuilder.java
@@ -0,0 +1,22 @@
+package com.premaseem.builder;
+
+import com.premaseem.room.BathRoom;
+import com.premaseem.room.BedRoom;
+import com.premaseem.room.LivingRoom;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+
+/* "ConcreteBuilder" */
+public class TwoBedroomHouseBuilder extends HouseBuilder{
+
+    @Override
+    public void addRooms () {
+        getHouse().rooms.add(new BathRoom());
+        getHouse().rooms.add(new BedRoom());
+        getHouse().rooms.add(new LivingRoom());
+    }
+}
diff --git a/pattern/src/com/premaseem/director/Architect.java b/pattern/src/com/premaseem/director/Architect.java
new file mode 100644
index 0000000..1d6263a
--- /dev/null
+++ b/pattern/src/com/premaseem/director/Architect.java
@@ -0,0 +1,32 @@
+package com.premaseem.director;
+
+import com.premaseem.builder.House;
+import com.premaseem.builder.HouseBuilder;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+
+/* "Director" */
+public class Architect {
+
+    private HouseBuilder houseBuilder;
+
+    public void setHouseBuilder (HouseBuilder houseBuilder) {
+        this.houseBuilder = houseBuilder;
+    }
+
+    public void buildHouse() {
+        houseBuilder.addRooms();
+        houseBuilder.addPlumbingSystem();
+        houseBuilder.addAirConditionerSystem();
+        houseBuilder.addSecuritySystem();
+        houseBuilder.paintHouse("white");
+    }
+
+    public House getFinishedHouse(){
+        return houseBuilder.getHouse();
+    }
+}
diff --git a/pattern/src/com/premaseem/room/BathRoom.java b/pattern/src/com/premaseem/room/BathRoom.java
new file mode 100644
index 0000000..0e31541
--- /dev/null
+++ b/pattern/src/com/premaseem/room/BathRoom.java
@@ -0,0 +1,14 @@
+package com.premaseem.room;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+public class BathRoom extends Room {
+
+public BathRoom (){
+    setNumberOfWindows(0);
+    setNumberOfWalls(3);
+}
+}
diff --git a/pattern/src/com/premaseem/room/BedRoom.java b/pattern/src/com/premaseem/room/BedRoom.java
new file mode 100644
index 0000000..cc75783
--- /dev/null
+++ b/pattern/src/com/premaseem/room/BedRoom.java
@@ -0,0 +1,14 @@
+package com.premaseem.room;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+public class BedRoom extends Room {
+
+public BedRoom(){
+    setNumberOfWindows(2);
+    setNumberOfWalls(4);
+}
+}
diff --git a/pattern/src/com/premaseem/room/LivingRoom.java b/pattern/src/com/premaseem/room/LivingRoom.java
new file mode 100644
index 0000000..e401f64
--- /dev/null
+++ b/pattern/src/com/premaseem/room/LivingRoom.java
@@ -0,0 +1,14 @@
+package com.premaseem.room;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+public class LivingRoom extends Room {
+
+public LivingRoom (){
+    setNumberOfWindows(2);
+    setNumberOfWalls(3);
+}
+}
diff --git a/pattern/src/com/premaseem/room/Room.java b/pattern/src/com/premaseem/room/Room.java
new file mode 100644
index 0000000..0de4757
--- /dev/null
+++ b/pattern/src/com/premaseem/room/Room.java
@@ -0,0 +1,30 @@
+package com.premaseem.room;
+
+/*
+@author: Aseem Jain
+@title: Design Patterns with Java 9
+@link: https://premaseem.wordpress.com/category/computers/design-patterns/
+*/
+public class Room {
+
+     private Integer numberOfWindows = 1;
+     private Integer numberOfWalls = 4;
+
+
+    public Integer getNumberOfWindows () {
+        return numberOfWindows;
+    }
+
+    public void setNumberOfWindows (Integer numberOfWindows) {
+        this.numberOfWindows = numberOfWindows;
+    }
+
+    public Integer getNumberOfWalls () {
+        return numberOfWalls;
+    }
+
+    public void setNumberOfWalls (Integer numberOfWalls) {
+        this.numberOfWalls = numberOfWalls;
+    }
+}
+
diff --git a/patternBonus/src/com/premaseem/Client.java b/patternBonus/src/com/premaseem/Client.java
deleted file mode 100644
index 15f05df..0000000
--- a/patternBonus/src/com/premaseem/Client.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.premaseem;
-
-/*
-@author: Aseem Jain
-@title: Design Patterns with Java 9
-@link: https://premaseem.wordpress.com/category/computers/design-patterns/
-@copyright: 2018 Packt Publication
-*/
-public class Client {
-    public static void main (String[] args) {
-        System.out.println("Singleton cook example ");
-    }
-}
diff --git a/patternBonus/src/com/premaseem/McDonaldsMealBuilder/ClientFile.java b/patternBonus/src/com/premaseem/McDonaldsMealBuilder/ClientFile.java
new file mode 100644
index 0000000..66585ed
--- /dev/null
+++ b/patternBonus/src/com/premaseem/McDonaldsMealBuilder/ClientFile.java
@@ -0,0 +1,44 @@
+package com.premaseem.McDonaldsMealBuilder;
+
+import java.util.Scanner;
+
+public class ClientFile {
+
+	public static void main(String[] args) {
+
+		System.out.println("Welcome to the Mc Donal which uses Builder Design pattern to build their Meals ");
+		Scanner scan = new Scanner(System.in);
+
+		int repeatRunFlag = 1;
+		MealBuilder mealBuilder = new MealBuilder();
+		Meal meal = null;
+		while (repeatRunFlag == 1) {
+			System.out.println("Which Meal would you like to order ? ");
+			System.out.println("press 1 for Veg Meal");
+			System.out.println("press 2 for Non Veg Meal ");
+
+			int type = scan.nextInt();
+			if (type == 1) {
+				meal = mealBuilder.buildVegMeal();
+			} else {
+				meal = mealBuilder.buildNonVegMeal();
+			}
+
+			
+			System.out.println(meal);
+			System.out.println("=============================");
+
+			System.out.println("Press 1 to Repeat .... ");
+			try {
+				repeatRunFlag = scan.nextInt();
+			} catch (Exception e) {
+				repeatRunFlag = 0;
+			}
+
+		}
+
+		System.out.println("\n $$$$$$$$$$$$$$$$$$$$  Thanks by Prem Aseem $$$$$$$$$$$$$$$$$$$$$$ \n ");
+		System.out.println("\n $$$$$$$$$$$$$$$$$$$$$  www.premaseem.me  $$$$$$$$$$$$$$$$$$$$$$ \n ");
+
+	}
+}
diff --git a/patternBonus/src/com/premaseem/McDonaldsMealBuilder/Meal.java b/patternBonus/src/com/premaseem/McDonaldsMealBuilder/Meal.java
new file mode 100644
index 0000000..aa98337
--- /dev/null
+++ b/patternBonus/src/com/premaseem/McDonaldsMealBuilder/Meal.java
@@ -0,0 +1,77 @@
+package com.premaseem.McDonaldsMealBuilder;
+
+import java.util.ArrayList;
+import java.util.List;
+
+
+public class Meal{
+	int cost;
+	List<Item> meal = new ArrayList<Item>();
+	void addItem(Item item){
+		cost += item.cost;
+		meal.add(item);
+	}
+	@Override
+    public String toString() {
+		System.out.println("You meal is ");
+		for(Item itm: meal){
+			System.out.print (itm.name + " ");
+		}
+		System.out.println();
+		System.out.println("Toal cost - " + cost);
+	    return " ";
+    }
+}
+
+abstract class Item{
+	Wrap warp;
+	int  cost =2;
+	String name;
+}
+
+class Burger extends Item{
+}
+
+class VegBurger extends Burger {
+	public VegBurger() {
+		this.name = "VegBurger";
+	}
+}
+
+class ChikenBurger extends Burger {
+	public ChikenBurger() {
+		this.name = "ChikenBurger";
+	}
+}
+
+class Wrap {
+	public String name;
+}
+
+class Bottle extends Wrap {
+	public Bottle() {
+		this.name = "Bottle";
+	}
+}
+
+class Box extends Wrap {
+	public Box() {
+		this.name = "Box";
+	}
+}
+
+class Drink extends Item {
+}
+
+class Milk extends Drink {
+	public Milk() {
+		this.name = "Milk";
+		cost = 10;
+	}
+}
+
+class Blood extends Drink {
+	public Blood() {
+		this.name = "Blood";
+	}
+}
diff --git a/patternBonus/src/com/premaseem/McDonaldsMealBuilder/MealBuilder.java b/patternBonus/src/com/premaseem/McDonaldsMealBuilder/MealBuilder.java
new file mode 100644
index 0000000..67c2792
--- /dev/null
+++ b/patternBonus/src/com/premaseem/McDonaldsMealBuilder/MealBuilder.java
@@ -0,0 +1,36 @@
+package com.premaseem.McDonaldsMealBuilder;
+
+
+public class MealBuilder {
+
+	public Meal buildVegMeal() {
+		Meal meal = new Meal();
+		Wrap bottle = new Bottle();
+		Wrap box = new Box();
+		VegBurger veg = new VegBurger();
+		veg.warp = box;
+		Drink milk = new Milk();
+		milk.warp=bottle;
+		
+		meal.addItem(veg);
+		meal.addItem(milk);
+		return meal;
+	}
+
+	public Meal buildNonVegMeal() {
+		Meal meal = new Meal();
+		Wrap bottle = new Bottle();
+		Wrap box = new Box();
+		Burger veg = new ChikenBurger();
+		veg.warp = box;
+		Drink milk = new Blood();
+		milk.warp=bottle;
+		
+		meal.addItem(veg);
+		meal.addItem(milk);
+		return meal;
+
+	}
+}
+
+
diff --git a/patternBonus/src/com/premaseem/ambulanceBuilder/AmbulanceBuilder.java b/patternBonus/src/com/premaseem/ambulanceBuilder/AmbulanceBuilder.java
new file mode 100644
index 0000000..8e82f40
--- /dev/null
+++ b/patternBonus/src/com/premaseem/ambulanceBuilder/AmbulanceBuilder.java
@@ -0,0 +1,38 @@
+package com.premaseem.ambulanceBuilder;
+
+public class AmbulanceBuilder {
+
+	Ambulance buildAmbulance(int numberOfWheel, String label){
+		Ambulance ambulance=new Ambulance();
+		VanFactory vanFactory = new VanFactory();
+		ambulance.setVan(vanFactory.getVan(numberOfWheel));
+		ambulance.setLabel(label);
+		return ambulance;
+	}
+}
+
+class Ambulance{
+	Van van;
+	String label;
+	
+	Van getVan() {
+		return van;
+	}
+	void setVan(Van van) {
+		this.van = van;
+	}
+	String getLabel() {
+		return label;
+	}
+	void setLabel(String label) {
+		this.label = label;
+	}
+
+	
+	@Override
+    public String toString() {
+	    return "Ambulance for " + label + " with number of wheels " + van.noOfWheels;
+    }
+	
+	
+}
\ No newline at end of file
diff --git a/patternBonus/src/com/premaseem/ambulanceBuilder/ClientForAmbulanceBuilder.java b/patternBonus/src/com/premaseem/ambulanceBuilder/ClientForAmbulanceBuilder.java
new file mode 100644
index 0000000..851fd02
--- /dev/null
+++ b/patternBonus/src/com/premaseem/ambulanceBuilder/ClientForAmbulanceBuilder.java
@@ -0,0 +1,49 @@
+package com.premaseem.ambulanceBuilder;
+
+import java.util.Scanner;
+
+
+public class ClientForAmbulanceBuilder {
+
+	public static void main(String[] args) {
+
+		System.out.println("Welcome to Abmulance Builder project  ");
+		Scanner scan = new Scanner(System.in);
+
+		int repeatRunFlag = 1;
+		AmbulanceBuilder ambulanceBuilder = new AmbulanceBuilder();
+		Ambulance ambulance = null;
+		while (repeatRunFlag == 1) {
+			System.out.println("What kind of Ambulance you want ? ");
+			System.out.println("press 1 for 4 Wheeler");
+			System.out.println("press 2 for 6 Wheeler ");
+			System.out.println("press 3 for 8 Wheeler ");
+			
+			int numberOfWheel = scan.nextInt();
+			
+			System.out.println("What kind lable you want for Ambulance ? ");
+			String label = scan.next();
+			
+				ambulance = ambulanceBuilder.buildAmbulance(numberOfWheel, label);
+
+			
+			System.out.println("Ambulanc is build " + ambulance);
+			System.out.println("=============================");
+
+			System.out.println("Press 1 to Repeat .... ");
+			try {
+				repeatRunFlag = scan.nextInt();
+			} catch (Exception e) {
+				repeatRunFlag = 0;
+			}
+
+		}
+
+		System.out.println("\n $$$$$$$$$$$$$$$$$$$$  Thanks by Prem Aseem $$$$$$$$$$$$$$$$$$$$$$ \n ");
+		System.out.println("\n $$$$$$$$$$$$$$$$$$$$$  www.premaseem.com  $$$$$$$$$$$$$$$$$$$$$$ \n ");	
+
+	}
+
+
+
+}
diff --git a/patternBonus/src/com/premaseem/ambulanceBuilder/VanFactory.java b/patternBonus/src/com/premaseem/ambulanceBuilder/VanFactory.java
new file mode 100644
index 0000000..213472d
--- /dev/null
+++ b/patternBonus/src/com/premaseem/ambulanceBuilder/VanFactory.java
@@ -0,0 +1,52 @@
+package com.premaseem.ambulanceBuilder;
+
+public class VanFactory {
+
+	// factory method
+	Van createVan(int noOfWheel) {
+		Van van = new Van();
+		van.noOfWheels = noOfWheel;
+		return van;
+	}
+
+	// simple factory
+	Van getVan(int noOfWheel) {
+
+		switch (noOfWheel) {
+		case 1:
+			return new FourWheelerVan();
+		case 2:
+			return new FourWheelerVan();
+		default:
+			return new EightWheelerVan();
+		}
+
+	}
+
+}
+
+
+
+
+
+class Van {
+	int noOfWheels;
+}
+
+class SixWheelerVan extends Van {
+	public SixWheelerVan() {
+		noOfWheels = 6;
+	}
+}
+
+class FourWheelerVan extends Van {
+	public FourWheelerVan() {
+		noOfWheels = 4;
+	}
+}
+
+class EightWheelerVan extends Van {
+	public EightWheelerVan() {
+		noOfWheels = 8;
+	}
+}