public class MazeGameCreator
{
public Maze createMaze()
{
Room room = makeRoom();
Wall wall = makeWall();
Door door = makeDoor();
Maze maze = new Maze();
maze.addRoom(room);
maze.addWall(wall);
maze.addDoor(door);
return maze;
}
// Factory Methods
public Room makeRoom()
{
Room room = new Room();
return room;
}
public Wall makeWall()
{
Wall wall = new Wall();
return wall;
}
public Door makeDoor()
{
Door door = new Door();
return door;
}
}
public class EvilMazeCreator extends MazeGameCreator
{
public Room makeRoom()
{
EvilRoom room = new EvilRoom();
return room;
}
public Wall makeWall()
{
EvilWall wall = new EvilWall();
return wall;
}
public Door makeDoor()
{
EvilDoor door = new EvilDoor();
return door;
}
}
public class GoodMazeCreator extends MazeGameCreator
{
public Room makeRoom()
{
GoodRoom room = new GoodRoom();
return room;
}
public Wall makeWall()
{
GoodWall wall = new GoodWall();
return wall;
}
public Door makeDoor()
{
GoodDoor door = new GoodDoor();
return door;
}
}
public class HauntedMazeCreator extends MazeGameCreator
{
public Room makeRoom()
{
HauntedRoom room = new HauntedRoom();
return room;
}
public Wall makeWall()
{
HauntedWall wall = new HauntedWall();
return wall;
}
public Door makeDoor()
{
HauntedDoor door = new HauntedDoor();
return door;
}
}
public class Maze
{
Collection mazeBuilder = new ArrayList();
public Maze()
{
}
public addWall(Wall pWall)
{
mazeBuilder.add(pWall);
}
public addRoom(Room pRoom)
{
mazeBuilder.add(pRoom);
}
public addDoor(Door pDoor)
{
mazeBuilder.add(pDoor);
}
}
public class Wall
{
public Wall()
{
}
}
public class EvilWall extends Wall
{
public EvilWall()
{
}
}
public class Room
{
public Room()
{
}
}
public class EvilRoom extends Room
{
public EvilRoom()
{
}
}
public class Door
{
public Door()
{
}
}
public class EvilDoor extends Door
{
public EvilDoor()
{
}
}
public class MazeBean
{
public static void main(String[] args)
{
if (args.length == 0)
{
System.out.println("Enter maze type.");
System.exit(0);
}
String name = args[0];
MazeGameCreator creator = new MazeGameCreator();
if ("Good".equals(name)) {
creator = new GoodMazeCreator();
}
else if ("Evil".equals(name)) {
creator = new EvilMazeCreator();
}
else if ("Haunted".equals(name)) {
creator = new HauntedMazeCreator();
}
Maze maze = creator.createMaze();
}
}