Builder Pattern – Mẫu thiết kế xây dựng

2 min read

Vấn đề

Trong lập trình, khi chúng ta muốn xây dựng một đối tượng có nhiều thuộc tính và các tham số khác nhau, việc sử dụng constructor có nhiều tham số có thể trở nên phức tạp và khó khăn. Đặc biệt là khi số lượng thuộc tính tăng lên, việc xác định thứ tự và giá trị của các tham số trở nên khó khăn và dễ gây nhầm lẫn. Điều này làm cho mã nguồn khó đọc, khó bảo trì và khó mở rộng.

Giải pháp

Builder Pattern cho phép chúng ta xây dựng đối tượng một cách linh hoạt và dễ dàng, bằng cách sử dụng các phương thức thiết lập các thuộc tính của đối tượng. Điều này giúp chúng ta tránh việc sử dụng constructor có nhiều tham số và giúp mã nguồn trở nên dễ đọc, dễ bảo trì và dễ mở rộng hơn.
Trong lập trình hướng đối tượng, Builder Pattern là một mẫu thiết kế sử dụng để xây dựng các đối tượng phức tạp từ các đối tượng đơn giản và các bước xây dựng tuần tự. Mẫu thiết kế này giúp chúng ta tạo ra các đối tượng phức tạp một cách linh hoạt và dễ dàng, đồng thời giảm bớt sự phụ thuộc vào các constructor có nhiều tham số.

Cấu trúc của Builder Pattern

Builder Pattern bao gồm các thành phần sau:

  • Builder: Định nghĩa các phương thức để thiết lập các thuộc tính của đối tượng.
  • ConcreteBuilder: Triển khai các phương thức của Builder để xây dựng đối tượng.
  • Product: Đại diện cho đối tượng cuối cùng được xây dựng.
  • Director: Quản lý quá trình xây dựng đối tượng bằng cách sử dụng Builder.

Ví dụ

Để minh họa cách sử dụng Builder Pattern, chúng ta sẽ xây dựng một ví dụ về việc xây dựng một đối tượng User trong một ứng dụng quản lý người dùng.

Đầu tiên, chúng ta cần định nghĩa lớp User với các thuộc tính như name, email, age, và address. Để xây dựng đối tượng User, chúng ta sẽ sử dụng Builder Pattern.

public class User {
    private String name;
    private String email;
    private int age;
    private String address;

    private User(Builder builder) {
        this.name = builder.name;
        this.email = builder.email;
        this.age = builder.age;
        this.address = builder.address;
    }

    // Getters

    public static class Builder {
        private String name;
        private String email;
        private int age;
        private String address;

        public Builder() {
        }

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

        public Builder setEmail(String email) {
            this.email = email;
            return this;
        }

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

        public Builder setAddress(String address) {
            this.address = address;
            return this;
        }

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

// Usage example
User user = new User.Builder()
    .setName("John Doe")
    .setEmail("john.doe@example.com")
    .setAge(25)
    .setAddress("123 Main St")
    .build();

Nguồn tham khảo: https://refactoring.guru/design-patterns/builder

Avatar photo

Leave a Reply

Your email address will not be published. Required fields are marked *