Site hosted by Angelfire.com: Build your free website today!
This is an example of a Factory Method Pattern.




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(); } }