I builder sono molto utili quando il tuo oggetto ha bisogno di un lotto di argomenti / dipendenze per essere utile, o vuoi consentire molti diversi modi di costruire l'oggetto.
In cima alla mia testa, posso immaginare che qualcuno possa voler "costruire" oggetti in un gioco 3D come questo:
// 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)
...
Direi che questo esempio è più leggibile con i metodi builder creati in questo momento rispetto ai parametri facoltativi:
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)
...
In particolare, le informazioni implicite dai nomi dei metodi builder devono essere sostituite da altri parametri, ed è molto più facile dimenticare un parametro in un gruppo di parametri strettamente correlati. In effetti, lo shader di frammenti manca, ma non lo si noterebbe a meno che non si sapesse di cercarlo.
Naturalmente, se il tuo oggetto richiede solo da uno a cinque argomenti da costruire, non c'è bisogno di coinvolgere il modello di builder, indipendentemente dal fatto che tu abbia o meno dei parametri denominati / facoltativi.