Los constructores son más útiles cuando su objeto necesita muchos argumentos / dependencias para ser útil, o si desea permitir muchas formas diferentes de construir el objeto.
Fuera de mi cabeza, puedo imaginar que alguien quiera "construir" objetos en un juego 3D como este:
// 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)
...
Yo diría que este ejemplo es más legible con los métodos de creación que he creado justo ahora que con los parámetros opcionales:
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)
...
En particular, la información implícita en los nombres de los métodos de creación debe reemplazarse por más parámetros, y es mucho más fácil olvidarse de un parámetro en un grupo de parámetros estrechamente relacionados. De hecho, falta el sombreador de fragmentos, pero no lo notarías a menos que supieras buscarlo.
Por supuesto, si su objeto solo requiere de uno a cinco argumentos para construir, no hay necesidad de involucrar el patrón de construcción, ya sea que haya nombrado o no parámetros opcionales.