Builder Pattern là một thiết kế mẫu (design pattern) trong lập trình hướng đối tượng giúp tạo ra các đối tượng phức tạp một cách có hệ thống và dễ hiểu. Nó tách biệt quá trình xây dựng một đối tượng khỏi biểu diễn của nó, cho phép cùng một quá trình xây dựng có thể tạo ra các biểu diễn khác nhau.
VD:
Giả sử chúng ta có một lớp House
với nhiều thuộc tính khác nhau như số tầng, số phòng, có bể bơi hay không, có gara hay không. Chúng ta sẽ sử dụng Builder Pattern để tạo đối tượng House
.
Lớp House với Builder Pattern
public class House {
private final int floors;
private final int rooms;
private final boolean hasSwimmingPool;
private final boolean hasGarage;
private House(HouseBuilder builder) {
this.floors = builder.floors;
this.rooms = builder.rooms;
this.hasSwimmingPool = builder.hasSwimmingPool;
this.hasGarage = builder.hasGarage;
}
public static class HouseBuilder {
private int floors;
private int rooms;
private boolean hasSwimmingPool;
private boolean hasGarage;
public HouseBuilder setFloors(int floors) {
this.floors = floors;
return this;
}
public HouseBuilder setRooms(int rooms) {
this.rooms = rooms;
return this;
}
public HouseBuilder setHasSwimmingPool(boolean hasSwimmingPool) {
this.hasSwimmingPool = hasSwimmingPool;
return this;
}
public HouseBuilder setHasGarage(boolean hasGarage) {
this.hasGarage = hasGarage;
return this;
}
public House build() {
return new House(this);
}
}
@Override
public String toString() {
return "House{" +
"floors=" + floors +
", rooms=" + rooms +
", hasSwimmingPool=" + hasSwimmingPool +
", hasGarage=" + hasGarage +
'}';
}
}
public class Main {
public static void main(String[] args) {
House house = new House.HouseBuilder()
.setFloors(2)
.setRooms(4)
.setHasSwimmingPool(true)
.setHasGarage(true)
.build();
}
}