Builder tách quá trình xây dựng object phức tạp thành các bước riêng biệt, cho phép tạo nhiều biểu diễn khác nhau của cùng một object.
Ví dụ TypeScript với method chaining:
typescript
const query = new QueryBuilder()
.select('*')
.from('users')
.where('age > 18')
.orderBy('name')
.limit(10)
.build()
// thay vì: new Query('*', 'users', 'age > 18', 'name', 10, undefined, undefined)Ưu điểm so với constructor nhiều tham số: không cần nhớ thứ tự tham số, tham số optional không cần truyền undefined, code readable hơn, có thể validate từng bước.
- Dùng khi: object có nhiều optional parameter (Telescoping Constructor anti-pattern); khi quá trình khởi tạo phức tạp có nhiều bước; khi cần tạo nhiều variant của cùng object.
- Trong Go, Builder thường implement bằng functional options pattern:
NewServer(WithPort(8080), WithTimeout(30*time.Second)).