Ja, absolut können Sie einen einfachen WorldBuilder haben, dessen Aufgabe es ist, eine vollständig konfigurierte Welt aus Türen, Wänden und Räumen zu erstellen. Dies ist sehr nützlich, wenn Sie ein teilweise erstelltes und möglicherweise ungültiges World-Objekt nicht verfügbar machen möchten.
Lasst uns sagen, dass die Nutzung des Erbauers ist wie folgt:
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();
Ein Nicht-Builder-Ansatz wollen könnte, so etwas tun, zwei Zimmer zu verbinden Objekte:
Door door = new Door(roomOne, roomTwo);
Aber wenn Sie Ich wiederhole jeden Raum aus einer Datei wie zuvor, dann haben Sie keinen Bezug mehr auf den zweiten Raum, weil er vielleicht noch nicht einmal erreicht wurde.
Ein alternativer Ansatz ist jedes Objekt nur die ID ihrer Nachbarn oder Eltern zu geben, so dass Sie diese stattdessen bekommen, die Sie auf ein Objekt beziehen können, die noch nicht geladen ist:
Door door = new Door(roomOneId, roomTwoId);
Aber wenn Es gab einen Fehler in der Datei und Raum 2 wurde nie definiert, dann wäre die Welt ungültig.
Der Builder kann sich um alle Details kümmern, um den Weltenerstellungsprozess korrekt zu konstruieren, zu verbinden und zu validieren, Flexibilität für den Clientcode zu gewähren, der die Welt erschaffen und das Weltobjekt der komplexen Konstruktionslogik freigeben möchte.
Hallo. Ich darf nur das Builder-Muster verwenden. – mrjasmin