Design Pattern - Builder Pattern

 https://howtodoinjava.com/design-patterns/creational/builder-pattern-in-java/#:~:text=The%20builder%20pattern%20is%20a,object%20it%20is%20to%20create.

In the above provided link you can acquire some notion about Builder Pattern. 

Here I provided one example of this pattern:

package Main;

public class Vehicle {
private String engine;
private int wheel;
private int airbags; // optional parameter

public String getEngine() {
return engine;
}

public int getWheel() {
return wheel;
}

public int getAirbags() {
return airbags;
}

private Vehicle(VehicleBuilder builder) {
this.engine = builder.engine;
this.wheel = builder.wheel;
this.airbags = builder.airbags;
}

public static class VehicleBuilder {
private String engine;
private int wheel;
private int airbags;

public VehicleBuilder(String engine, int wheel) {
this.engine = engine;
this.wheel = wheel;
}

public VehicleBuilder setAirbags(int airbags) {
this.airbags = airbags;
return this;
}

public Vehicle build() {
return new Vehicle(this);
}
}
}
package Main;

public class Main {

public static void main(String[] args) {
Vehicle car = new Vehicle.VehicleBuilder("1500cc", 4).setAirbags(2).build();
Vehicle bike = new Vehicle.VehicleBuilder("250cc", 2).build();
}
}

*Now here another example of Builder Pattern. This time we allow user to set 
multiple parameters after creating object.

public class Person {
private String name;
private String surname;
private int age;
private String religion;

public void setName(String name) {
this.name = name;
}

public void setSurname(String surname) {
this.surname = surname;
}

public void setAge(int age) {
this.age = age;
}

public void setReligion(String religion) {
this.religion = religion;
}

public String getName() {
return name;
}

public String getSurname() {
return surname;
}

public int getAge() {
return age;
}

public String getReligion() {
return religion;
}

public static class PersonBuilder {
private String name;
private String surname;
private int age;
private String religion;

public PersonBuilder(String name, String surname) {
this.name = name;
this.surname = surname;
}

public PersonBuilder setAge(int age) {
this.age = age;
return this;
}

public PersonBuilder setReligion(String religion) {
this.religion = religion;
return this;
}

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

private Person(PersonBuilder builder) {
this.name = builder.name;
this.surname = builder.surname;
this.age = builder.age;
this.religion = builder.religion;
}

@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", surname='" + surname + '\'' +
", age=" + age +
", religion='" + religion + '\'' +
'}';
}
}

*Another alternative:
public class Fanar {
private String name;
private String surname;
private String fatherName;
private int age;

private Fanar() {
}

private Fanar(String name, String surname, String fatherName, int age) {
this.name = name;
this.surname = surname;
this.fatherName = fatherName;
this.age = age;
}

public static class FanarBuilder {
private Fanar f = null;

public FanarBuilder() {
f = new Fanar();
}

public FanarBuilder setName(String name) {
this.f.name = name;
return this;
}

public FanarBuilder setSurname(String surname) {
this.f.surname = surname;
return this;
}

public FanarBuilder setFatherName(String fatherName) {
this.f.fatherName = fatherName;
return this;
}

public FanarBuilder setAge(int age) {
this.f.age = age;
return this;
}

public Fanar build() {
return new Fanar(f.name, f.surname, f.fatherName, f.age);
}
}

@Override
public String toString() {
return "Fanar{" +
"name='" + name + '\'' +
", surname='" + surname + '\'' +
", fatherName='" + fatherName + '\'' +
", age=" + age +
'}';
}
}

package com.company;

public class BMW {
private String name;
private String color;
private String engine;

private BMW() {
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
public String getEngine() {
return engine;
}

private static Builder builder;
public static Builder builder() {
if (builder == null) {
builder = new Builder();
}
builder.bmw = new BMW();
return builder;
}

public static class Builder {
private BMW bmw;

public Builder setName(String name) {
bmw.name = name;
return this;
}

public Builder setColor(String color) {
bmw.color = color;
return this;
}

public Builder setEngine(String engine) {
bmw.engine = engine;
return this;
}

public BMW build(){
return bmw;
}
}
}

package com.company;

public class BMW {
private String name;
private String color;
private String engine;

private BMW() {
}
public String getName() {
return name;
}
public String getColor() {
return color;
}
public String getEngine() {
return engine;
}

public static class Builder {
private BMW bmw;
private static Builder builder;
public static Builder builder() {
if (builder == null) {
builder = new Builder();
}
builder.bmw = new BMW();
return builder;
}

public Builder setName(String name) {
bmw.name = name;
return this;
}

public Builder setColor(String color) {
bmw.color = color;
return this;
}

public Builder setEngine(String engine) {
bmw.engine = engine;
return this;
}

public BMW build(){
return bmw;
}
}
}

package com.builder;

public class User {
private String name;
private String surname;
private String fatherName;

public static class Builder{
private User user;

public Builder name(String name){
user.name = name;
return this;
}

public Builder surname(String surname){
user.surname = surname;
return this;
}

public Builder fatherName(String faherName){
user.fatherName = faherName;
return this;
}

public User build(){
return user;
}
}
}

Комментарии

Популярные сообщения из этого блога

IoC:ApplicationContext, BeanFactory. Bean

Lesson1: JDK, JVM, JRE

Lesson_2: Operations in Java