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




public class MazeAbstractFactory
{
    public static Maze createMaze(MazeFactory pFactory)
    {
         Room room = pFactory.makeRoom();
         Wall wall = pFactory.makeWall();
         Door door = pFactory.makeDoor();
         Maze maze = new Maze();
         maze.addRoom(room);
         maze.addWall(wall);
         maze.addDoor(door);
         return maze;
    }
}

public class MazeFactory { // 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 EvilMazeFactory extends MazeFactory { 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 GoodMazeFactory extends MazeFactory { 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 HauntedMazeFactory extends MazeFactory { 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) { } public addRoom(Room 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() { } }

/** * Transaction would come from a webpage, and the webpage would * prepend the type of transaction so we could create the appropriate * object. */ public class MerchantBean { public static void main(String[] args) { if (args.length == 0) { System.out.println("Enter payment type."); System.exit(0); } String name = args[0]; MazeFactory factory = new MazeFactory(); if ("Good".equals(name)) { factory = new GoodMazeFactory(); } else if ("Evil".equals(name)) { factory = new EvilMazeFactory(); } else if ("Haunted".equals(name)) { factory = new HauntedMazeFactory(); } Maze maze = MazeAbstractFactory.createMaze(factory); } }