Sí, por supuesto que puede tener un WorldBuilder sencilla whos trabajo es crear un mundo totalmente configurado compuesta de puertas, paredes y habitaciones. Esto es muy útil cuando no quiere que exista un objeto World parcialmente construido y posiblemente no válido.
Digamos que el uso del constructor es así:
WorldBuilder builder = new WorldBuilder();
// read the definition of a room from an XML file or other source.
// this is vastily simplified, you'd probably be iteration
// something like this:
//
// for each Room in file
// for each wall in room
// for each door in wall
//
roomId = readRoomId();
wallId = readWallId();
doorId = readDoorId();
destRoomId = readDestinationRoomId();
builder.AddRoom(roomId);
builder.AddWallToRoom(roomId, wallId, SIDE.NORTH);
builder.AddDoorToWall(wallId, DOORSTYLE.WOODEN | DOORSTYLE.LOCKED, destRoomId);
// etc, etc
World world = builder.makeWorld();
Un enfoque no-constructor podría querer hacer algo como esto para conectar dos salas de objetos:
Door door = new Door(roomOne, roomTwo);
Pero si estaban iterando cada habitación desde un archivo como antes, entonces no tendrá una referencia a la segunda sala porque es posible que aún no se haya alcanzado.
Un enfoque alternativo es dar a cada objeto sólo la identificación de sus vecinos o de los padres para que pueda obtener esto en su lugar, lo que le permite referirse a un objeto que no se ha cargado todavía:
Door door = new Door(roomOneId, roomTwoId);
Pero si hubo un error en el archivo y la sala 2 nunca se definió, entonces el Mundo sería inválido.
The Builder puede encargarse de todos los detalles de construir, conectar y validar correctamente el proceso de creación mundial, otorgando flexibilidad al código del cliente que desea crear el mundo y recuperando el objeto mundial de lógica de construcción compleja.
Hola. Solo puedo usar el patrón del constructor. – mrjasmin