Builder sind am nützlichsten, wenn Ihr Objekt viele Argumente / Abhängigkeiten benötigt, um nützlich zu sein, oder wenn Sie viele verschiedene Möglichkeiten zum Erstellen des Objekts zulassen möchten.
Ich kann mir vorstellen, dass jemand Objekte in einem 3D-Spiel wie diesem "bauen" möchte:
// 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)
...
Ich würde argumentieren, dass dieses Beispiel mit den Builder-Methoden, die ich gerade erstellt habe, besser lesbar ist als mit optionalen Parametern:
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)
...
Insbesondere müssen die durch die Builder-Methodennamen implizierten Informationen durch noch mehr Parameter ersetzt werden, und es ist viel einfacher, einen Parameter in einer Gruppe eng verwandter Parameter zu vergessen. Tatsächlich fehlt der Fragment-Shader, aber das würden Sie nicht bemerken, wenn Sie nicht wüssten, dass Sie danach suchen.
Wenn für die Konstruktion Ihres Objekts nur ein bis fünf Argumente erforderlich sind, muss das Builder-Muster nicht einbezogen werden, unabhängig davon, ob Sie / optionale Parameter angegeben haben oder nicht.