Les constructeurs sont plus utiles lorsque votre objet a besoin de nombreux arguments / dépendances pour être utile, ou si vous souhaitez autoriser de nombreuses façons différentes de construire l'objet.
Du haut de ma tête, je peux imaginer que quelqu'un pourrait vouloir "construire" des objets dans un jeu 3D comme celui-ci:
// 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)
...
Je dirais que cet exemple est plus lisible avec les méthodes de générateur que j'ai inventées tout à l'heure qu'avec des paramètres facultatifs:
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 particulier, les informations impliquées par les noms de méthode de générateur doivent être remplacées par encore plus de paramètres, et il est beaucoup plus facile d'oublier un paramètre dans un groupe de paramètres étroitement liés. En fait, le fragment shader est manquant, mais vous ne le remarquerez pas à moins de savoir le chercher.
Bien sûr, si votre objet ne prend qu'un à cinq arguments à construire, il n'est pas nécessaire d'impliquer le modèle de générateur, que vous ayez ou non nommé des paramètres facultatifs.