Tak, absolutnie możesz mieć prosty WorldBuilder, którego zadaniem jest stworzenie w pełni skonfigurowanego świata składającego się z Drzwi, Ścian i Pokoi. Jest to bardzo przydatne, gdy nie chcesz, aby częściowo zbudowany i prawdopodobnie nieważny obiekt Świata był odsłonięty.
Powiedzmy użycie konstruktora jest tak:
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();
Podejście non-budowniczy może chcieć zrobić coś takiego, aby połączyć dwa pokoje obiektów:
Door door = new Door(roomOne, roomTwo);
ale jeśli Przetwarzałem każdy pokój z pliku, tak jak wcześniej, wtedy nie będziesz miał odniesienia do drugiego pokoju, ponieważ nie został jeszcze osiągnięty.
Alternatywnym podejściem jest dać każdy obiekt tylko identyfikator sąsiadami lub rodzica więc masz zamiast tego, który pozwala odwołać się do obiektu, który nie został jeszcze załadowany:
Door door = new Door(roomOneId, roomTwoId);
ale jeśli wystąpił błąd w pliku, a pokój 2 nigdy nie został zdefiniowany, a świat byłby nieprawidłowy.
Konstruktor może zadbać o wszystkie szczegóły dotyczące prawidłowego konstruowania, łączenia i sprawdzania poprawności procesu tworzenia świata, zapewniając elastyczność kodu klienta, który chce tworzyć świat i oddzielając obiekt światowej złożonej logiki konstrukcyjnej.
Witam. Mogę tylko użyć wzorca budowniczego. – mrjasmin