Mẫu thiết kế Builder là gì?

Mẫu thiết kế Builder đóng gói các thuộc tính của một đối tượng và cho phép bạn xây dựng một biểu diễn của nó. Mẫu này cho phép bạn xây dựng các đối tượng phức tạp, với các thuộc tính khác nhau mặc dù chúng thuộc cùng một lớp.
Một lớp đối tượng điển hình chứa các thuộc tính, hàm tạo và phương thức. Mẫu trình tạo cho phép bạn trích xuất logic xây dựng từ lớp đối tượng và đặt nó vào các lớp được gọi là trình tạo. Sau đó, bạn có thể sử dụng các lớp trình tạo này để tạo các biến thể khác nhau của cùng một đối tượng.
Mục Lục
Triển khai Builder Pattern trong Java
Một ví dụ điển hình về mẫu trình tạo là hệ thống đặt hàng bánh pizza cho phép khách hàng chọn các tùy chọn phủ khác nhau.
Lớp sản phẩm
Một cách tiếp cận là làm cho trình xây dựng trở thành một giao diện, nhưng trước tiên bạn sẽ cần tạo một lớp sản phẩm. Sản phẩm trong ứng dụng mẫu này là một chiếc bánh pizza.
public class Pizza {
private int orderNumber;
private String pizzaDough;
private String topping;
public int getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(int orderNumber) {
this.orderNumber = orderNumber;
}
public String getPizzaDough() {
return pizzaDough;
}
public void setPizzaDough(String pizzaDough) {
this.pizzaDough = pizzaDough;
}
public String getTopping() {
return topping;
}
public void setTopping(String topping) {
this.topping = topping;
}
}
lớp thợ xây
Lớp Pizza Java có ba thuộc tính và các getters và setters tương ứng của chúng, nhưng không có phương thức khởi tạo nào. Giao diện trình tạo sẽ cho phép bạn tạo riêng từng khía cạnh của đối tượng pizza. Sau đó, nó sẽ cho phép bạn truy xuất toàn bộ đối tượng pizza.
public interface Builder {
public void createPizzaDough();
public void createTopping();
public Pizza getPizza();
}
Ứng dụng pizza mẫu cho phép khách hàng đặt bất kỳ loại phủ nào, chẳng hạn như phô mai, xúc xích tiêu, hành tây hoặc các cách kết hợp khác nhau. Do đó, một chiếc bánh pizza mà khách hàng sẽ đặt là phô mai.
public class CheesePizzaBuilder implements Builder {
private Pizza pizza;
public CheesePizzaBuilder() {
this.pizza = new Pizza();
}
@Override
public void createPizzaDough() {
this.pizza.setPizzaDough("Dough");
}
@Override
public void createTopping() {
this.pizza.setTopping("Cheese");
}
@Override
public Pizza getPizza() {
return this.pizza;
}
}
Lớp CheesePizzaBuilder triển khai giao diện Builder và sử dụng nó để tạo một chiếc bánh pizza phô mai mới. Đây là một đại diện của đối tượng Pizza. Nó cũng thực hiện điều này theo cách độc lập với lớp Pizza.
Lớp CheesePizzaBuilder không biết nhiều về lớp Pizza, nó chỉ biết những gì nó cần biết để hoàn thành chức năng của nó. Nó biết rằng lớp Pizza có thuộc tính bột và topping, và nó đặt các thuộc tính này thành hai giá trị cụ thể mà mỗi chiếc bánh pizza phô mai sẽ có. Giờ đây, mỗi khi ứng dụng gọi lớp CheesePizzaBuilder, nó sẽ tạo ra một chiếc bánh Pizza mới có phủ phô mai.
Lớp giám đốc
Lớp giám đốc là một khía cạnh quan trọng của mẫu xây dựng. Mục đích duy nhất của lớp trình xây dựng cụ thể là tạo một đối tượng cụ thể. Nó đạt được điều này bằng cách tạo ra các phần khác nhau của một đối tượng một cách riêng biệt.
Tuy nhiên, các lớp cụ thể của trình xây dựng không biết về thuật toán. Không lớp thợ xây nào biết nhào bột trước khi thêm lớp phủ. Đây là chức năng của lớp giám đốc.
public class Director {
private Builder pizzaBuilder;
public Director(Builder pizzaBuilder) {
this.pizzaBuilder = pizzaBuilder;
}
public Pizza getPizza() {
return this.pizzaBuilder.getPizza();
}
public void makePizza() {
this.pizzaBuilder.createPizzaDough();
this.pizzaBuilder.createTopping();
}
}
Lớp Director sử dụng giao diện trình tạo để tạo pizza. Nó là người giữ thuật toán.
Ưu điểm của việc sử dụng Mẫu thiết kế Builder
Ưu điểm chính của việc sử dụng mẫu thiết kế trình tạo là thuộc tính đóng gói của nó. Đây là một khía cạnh quan trọng của công nghệ phần mềm, vì nó hỗ trợ trong việc phát triển các ứng dụng an toàn.
Một ưu điểm khác của mẫu thiết kế này là cách tiếp cận xây dựng đối tượng của nó. Nó cho phép bạn tạo các quy trình gồm nhiều bước, trong đó mỗi bước là độc lập, giúp việc gỡ lỗi dễ dàng hơn.