Builder Design Pattern là một trong những mẫu thiết kế creational pattern trong lập trình phần mềm. Mục tiêu chính của nó là tạo ra một đối tượng phức tạp bằng cách sử dụng một loạt các bước xây dựng. Thông thường, khi một đối tượng có nhiều thuộc tính và một số thuộc tính có thể được cài đặt tùy ý, việc sử dụng constructor có thể trở nên khó khăn hoặc gây ra sự rối loạn trong mã. Builder Pattern giải quyết vấn đề này bằng cách cung cấp một cách tiếp cận linh hoạt để xây dựng đối tượng.

Giả sử chúng ta muốn xây dựng một đối tượng Person có các thuộc tính như tên, tuổi, địa chỉ và số điện thoại. Mỗi thuộc tính này có thể được cài đặt tùy ý và không bắt buộc. Chúng ta sẽ sử dụng Builder Pattern để xây dựng đối tượng Person một cách linh hoạt.

Đầu tiên, chúng ta sẽ định nghĩa lớp Person:

data class Person(
    val name: String,
    val age: Int,
    val address: String?,
    val phoneNumber: String?
)

Tiếp theo, chúng ta sẽ tạo lớp PersonBuilder để xây dựng đối tượng Person:

class PersonBuilder(private val name: String, private val age: Int) {
    private var address: String? = null
    private var phoneNumber: String? = null

    fun setAddress(address: String): PersonBuilder {
        this.address = address
        return this
    }

    fun setPhoneNumber(phoneNumber: String): PersonBuilder {
        this.phoneNumber = phoneNumber
        return this
    }

    fun build(): Person {
        return Person(name, age, address, phoneNumber)
    }
}

Bây giờ, chúng ta có thể sử dụng PersonBuilder để xây dựng các đối tượng Person một cách linh hoạt:

fun main() {
    val person1 = PersonBuilder("John", 30)
        .setAddress("123 Main St")
        .setPhoneNumber("555-1234")
        .build()

    println(person1)

    val person2 = PersonBuilder("Alice", 25)
        .setPhoneNumber("555-5678")
        .build()

    println(person2)
}

Trong ví dụ này, chúng ta đã sử dụng PersonBuilder để xây dựng hai đối tượng Person với các thuộc tính được cài đặt tùy ý. Sử dụng Builder Pattern giúp mã dễ đọc hơn và giảm thiểu sự phức tạp khi xây dựng các đối tượng phức tạp.