はい、まったく簡単なWorldBuilderの仕事は、ドア、壁、お部屋からなる完全に構成された世界を作成することです。これは、部分的にビルドされ、おそらく無効なWorldオブジェクトが公開されることを望まない場合に非常に便利です。
のは、ビルダーの使用量がこのようなものですとしましょう:2つの部屋のオブジェクトを接続するには、このような何かをしたいと思うかもしれません
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();
非ビルダーのアプローチ:
Door door = new Door(roomOne, roomTwo);
しかし、あなたの場合前のようにファイルから各部屋を繰り返していたため、まだ到達していない可能性があるため、2番目の部屋への参照はありません。
別のアプローチは、あなたがまだロードされていないオブジェクトを参照することを可能にする、あなたの代わりにこれを取得するように、各オブジェクトに、その隣人や親だけのIDを与えることです:
Door door = new Door(roomOneId, roomTwoId);
しかし、もしファイルにエラーがあり、部屋2が決して定義されなかった場合、世界は無効になります。
ビルダーは、ワールド作成プロセスを適切に構築、接続、検証し、ワールドを作成したいクライアントコードに柔軟性を与え、複雑な構築ロジックのWorldオブジェクトを再利用することのすべての詳細を処理できます。
こんにちは。 Imはビルダーパターンを使用することを許可しました。 – mrjasmin