Пошаговое создание сложного объекта через отдельный класс Builder. Удобно при многих опциональных параметрах.
$query = (new QueryBuilder())
->select(['id', 'name'])
->from('users')
->where('active', true)
->orderBy('name')
->limit(10)
->build();Избегает "телескопических" конструкторов с десятками параметров. Director (опционально) задает порядок шагов.