Строители наиболее полезны, когда вашему объекту нужно много аргументов / зависимостей, чтобы быть полезными, или если вы хотите разрешить много разных способов конструирования объекта.
Вдобавок ко всему, я могу представить, что кто-то может захотеть «построить» объекты в 3D-игре, подобной этой:
// Just ignore the fact that this hypothetical god class is coupled to everything ever
new ObjectBuilder(x, y, z).importBlenderMesh("./meshes/foo")
.syncWithOtherPlayers(serverIP)
.compileShaders("./shaders/foo.vert", "./shaders/foo.frag")
.makeDestructibleRigidBody(health, weight)
...
Я бы сказал, что этот пример более читабелен с помощью методов компоновщика, которые я только что составил, чем с необязательными параметрами:
new Object(x, y, z, meshType: MESH.BLENDER,
meshPath: "./meshes/foo",
serverToSyncWith: serverIP,
vertexShader: "./shaders/foo.vert",
physicsType: PHYSICS_ENGINE.RIGID_DESTRUCTIBLE,
health: health,
weight: weight)
...
В частности, информация, подразумеваемая именами методов компоновщика, должна быть заменена еще большим количеством параметров, и гораздо проще забыть об одном параметре в группе тесно связанных параметров. Фактически, фрагментный шейдер отсутствует, но вы не заметите этого, если не будете его искать.
Конечно, если ваш объект принимает от одного до пяти аргументов для создания, нет необходимости вовлекать шаблон компоновщика, независимо от того, были ли у вас именованные / необязательные параметры.