Konstruktory są najbardziej przydatne, gdy twój obiekt potrzebuje wielu argumentów / zależności, aby być użytecznym lub jeśli chcesz pozwolić na wiele różnych sposobów konstruowania obiektu.
Z czubka mojej głowy mogę sobie wyobrazić, że ktoś może chcieć „budować” obiekty w takiej grze 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)
...
Argumentowałbym, że ten przykład jest bardziej czytelny dzięki metodom konstruktora, które właśnie stworzyłem, niż byłoby to z opcjonalnymi parametrami:
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)
...
W szczególności informacje sugerowane przez nazwy metod konstruktora muszą zostać zastąpione jeszcze większą liczbą parametrów i o wiele łatwiej jest zapomnieć o jednym parametrze w grupie ściśle powiązanych parametrów. W rzeczywistości brakuje shadera fragmentów, ale nie zauważyłbyś tego, gdybyś nie wiedział, jak go szukać.
Oczywiście, jeśli twój obiekt wymaga tylko jednego do pięciu argumentów do skonstruowania, nie ma potrzeby angażowania wzorca konstruktora, niezależnie od tego, czy podałeś / nie parametry opcjonalne.