Design Patterns: Builder
Thuộc nhóm: Creational
Tần suất sử dụng: Trung bình
Vấn đề đặt ra
Trong những ứng dụng lớn, với nhiều các chức năng phức tạp và mô hình giao diện đồ sộ.Việc khởi tạo ứng dụng thường gặp nhiều khó khăn. Chúng ta không thể dồn tất cả công việc khởi tạo này cho một hàm khởi tạo .Vì như thế sẽ rất khó kiểm soát hết, và hơn nữa không phải lúc nào các thành phần của ứng dụng cũng được khởi tạo một cách đồng bộ. Có thành phần được tạo ra vào lúc dịch chương trình nhưng cũng có thành phần tuỳ theo từng yêu cầu của người dùng, tuỳ vào hoàn cảnh của ứng dụng, mà nó sẽ được tạo ra. Do vậy người ta giao công việc này cho một đối tượng chịu trách nhiêm khởi tạo, và chia việc khởi tạo ứng dụng riêng rẽ, để có thể tiến hành khởi tạo riêng biệt ở các hoàn cảnh khác nhau. Hãy tưởng tượng việc tạo ra đối tượng của ta giống như như việc chúng ta tạo ra chiếc xe đạp. Đầu tiên ta tạo ra khung xe, sau đó tạo ra bánh xe, chúng ta tạo ra buđông xe, xích, líp,.. Việc tạo ra các bộ phận này không nhất thiết phải đựơc thực hiện một cách đồng thời hay theo một trật tự nào cả, và nó có thể được tạo ra một cách độc lập bởi nhiều người. Nhưng trong một mô hình sản xuất như vậy, bao giờ việc tạo ra chiếc xe cũng được khép kín để tạo ra chiếc xe hoàn chỉnh, đó là nhà máy sản xuất xe đạp.Ta gọi đối tượng nhà máy sản xuất xe đạp này là builder ( người xây dựng).
Định nghĩa
Builder là mẫu thiết kế hướng đối tượng được tạo ra để chia một công việc khởi tạo phức tạp của một đối tượng ra riêng rẽ từ đó có thể tiến hành khởi tạo đối tượng ở các hoàn cảnh khác nhau.
Sơ đồ UML
Builder (VehicleBuilder):
- Chỉ ra một giao diện trừu tượng cho việc tạo ra các phần của một đối tượng Product.
ConcreteBuilder (MotorCycleBuilder, CarBuilder, ScooterBuilder):
- Xây dựng và lắp ráp các phần của dẫn xuất bằng việc cài đặt bổ sung giao diện Builder.
- Định nghĩa và giữ liên kết đến đại diện mà nó tạo ra.
- Cung cấp một giao diện cho việc gọi dẫn xuất ra.
Director (Shop):
- Xây dựng một đối tượng sử dụng giao diện Builder.
Product (Vehicle):
- Biểu diễn các đối tượng phức tạp.ConcreteBuilder dựng nên các đại diện bên trong của dẫn xuất và định nghĩa quá trình xử lý bằng các thành phần lắp ráp của nó.
- Gộp các lớp mà định nghĩa các bộ phận cấu thành, bao gồm các giao diện cho việc lắp ráp các bộ phận trong kết quả cuối cùng.
Các mẫu liên quan
Builder thường được cài đặt cùng với các mẫu như Abstract Factory .Tầm quan trọng của Abstract Factory là tạo ra một dòng các đối tượng dẫn xuất (cả đơn giản và phức tạp).Ngoài ra Builder còn thường được cài đặt kèm với Composite pattern. Composite pattern thường là những gì mà Builder tạo ra.