- Sản phẩm & Dịch vụSản phẩm & Dịch vụ
- Giải phápGiải pháp
- Bảng giáBảng giá
- Công tyCông ty
- Tài liệuTài liệu
vi
vi
Chuyên mục với các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.
I’m passionate about web development and sharing my insights through articles, with over 8 years of experience. I hope these sharings inspire you and help build a strong web development community. @#@ Tôi đam mê phát triển web và chia sẻ những hiểu biết của mình thông qua các bài viết, với hơn 8 năm kinh nghiệm. Tôi hy vọng những chia sẻ này sẽ truyền cảm hứng cho các bạn và giúp xây dựng một cộng đồng phát triển web mạnh mẽ.
Thảo luận (0)
Đăng nhập để thảo luận
Hôm nay, chúng ta sẽ tìm hiểu về Builder Design Pattern trong Java (mẫu thiết kế Builder). Đây là một mẫu dạng khởi tạo (creational), tương tự như các mẫu Factory và Abstract.

Mẫu này ra đời nhằm giải quyết một số vấn đề của Factory và Abstract, đặc biệt khi một đối tượng chứa nhiều thuộc tính. Có ba vấn đề chính thường gặp với các mẫu thiết kế trong trường hợp đối tượng có nhiều thuộc tính:
NULL.Ta có thể giải quyết vấn đề số lượng tham số lớn bằng cách cung cấp một constructor (phương thức khởi tạo) chỉ chứa các tham số bắt buộc, sau đó dùng các phương thức setter (phương thức gán giá trị cho thuộc tính) để gán giá trị cho các tham số tùy chọn. Tuy nhiên, vấn đề của cách tiếp cận này là trạng thái của đối tượng sẽ không nhất quán cho đến khi tất cả các thuộc tính được thiết lập một cách tường minh.
Mẫu Builder giải quyết vấn đề với số lượng lớn tham số tùy chọn và trạng thái không nhất quán bằng cách cung cấp một phương pháp xây dựng đối tượng theo từng bước, và cuối cùng sẽ cung cấp một phương thức để trả về đối tượng hoàn chỉnh.
Hãy cùng xem cách triển khai Builder pattern trong Java.
Computer, thì lớp builder nên có tên là ComputerBuilder.build() trong lớp builder để trả về đối tượng mà chương trình client cần. Để làm được điều này, lớp chính cần có một constructor dạng private và nhận chính lớp Builder làm tham số.Dưới đây là một chương trình ví dụ có lớp Computer cùng với lớp ComputerBuilder để tạo ra nó.
package com.journaldev.design.builder;public class Computer {
//required parameters private String HDD; private String RAM; //optional parameters private boolean isGraphicsCardEnabled; private boolean isBluetoothEnabled; public String getHDD() { return HDD; } public String getRAM() { return RAM; } public boolean isGraphicsCardEnabled() { return isGraphicsCardEnabled; } public boolean isBluetoothEnabled() { return isBluetoothEnabled; } private Computer(ComputerBuilder builder) { this.HDD=builder.HDD; this.RAM=builder.RAM; this.isGraphicsCardEnabled=builder.isGraphicsCardEnabled; this.isBluetoothEnabled=builder.isBluetoothEnabled; } //Builder Class public static class ComputerBuilder{ // required parameters private String HDD; private String RAM; // optional parameters private boolean isGraphicsCardEnabled; private boolean isBluetoothEnabled; public ComputerBuilder(String hdd, String ram){ this.HDD=hdd; this.RAM=ram; } public ComputerBuilder setGraphicsCardEnabled(boolean isGraphicsCardEnabled) { this.isGraphicsCardEnabled = isGraphicsCardEnabled; return this; } public ComputerBuilder setBluetoothEnabled(boolean isBluetoothEnabled) { this.isBluetoothEnabled = isBluetoothEnabled; return this; } public Computer build(){ return new Computer(this); } }}
Lưu ý rằng lớp Computer chỉ có các phương thức getter (lấy tham số) và không có constructor dạng public. Vì vậy, cách duy nhất để có được một đối tượng Computer là thông qua lớp ComputerBuilder.
Dưới đây là một chương trình mẫu cho thấy cách sử dụng lớp Builder để lấy đối tượng.
package com.journaldev.design.test;import com.journaldev.design.builder.Computer;
public class TestBuilderPattern {
public static void main(String[] args) { //Using builder to get the object in a single line of code and //without any inconsistent state or arguments management issues Computer comp = new Computer.ComputerBuilder( "500 GB", "2 GB").setBluetoothEnabled(true) .setGraphicsCardEnabled(true).build(); }}
Một số class của Java sử dụng mẫu thiết kế Builder bao gồm:
java.lang.StringBuilder#append() (không đồng bộ)java.lang.StringBuffer#append() (đồng bộ)Hy vọng bài viết đã giúp bạn hiểu rõ hơn về cách áp dụng Builder Design Pattern trong Java để xây dựng các đối tượng phức tạp một cách hiệu quả và an toàn. Nếu bạn có thắc mắc hay cần giải thích thêm về bất kỳ phần nào, đừng ngần ngại đặt câu hỏi bên dưới nhé.