Skip to content

Builder Design Pattern #10

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 9 commits into
base: develop
Choose a base branch
from
31 changes: 29 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -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.
Binary file added diagrams/3.3 Builder Design pattern.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 14 additions & 2 deletions pattern/src/com/premaseem/Client.java
Original file line number Diff line number Diff line change
@@ -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);

}
}
32 changes: 32 additions & 0 deletions pattern/src/com/premaseem/builder/House.java
Original file line number Diff line number Diff line change
@@ -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 "";
}
}
39 changes: 39 additions & 0 deletions pattern/src/com/premaseem/builder/HouseBuilder.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
22 changes: 22 additions & 0 deletions pattern/src/com/premaseem/builder/OneBedroomHouseBuilder.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
22 changes: 22 additions & 0 deletions pattern/src/com/premaseem/builder/TwoBedroomHouseBuilder.java
Original file line number Diff line number Diff line change
@@ -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());
}
}
32 changes: 32 additions & 0 deletions pattern/src/com/premaseem/director/Architect.java
Original file line number Diff line number Diff line change
@@ -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();
}
}
14 changes: 14 additions & 0 deletions pattern/src/com/premaseem/room/BathRoom.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
14 changes: 14 additions & 0 deletions pattern/src/com/premaseem/room/BedRoom.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
14 changes: 14 additions & 0 deletions pattern/src/com/premaseem/room/LivingRoom.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
30 changes: 30 additions & 0 deletions pattern/src/com/premaseem/room/Room.java
Original file line number Diff line number Diff line change
@@ -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;
}
}

13 changes: 0 additions & 13 deletions patternBonus/src/com/premaseem/Client.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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 ");

}
}
Loading