Design Pattern: Builder 模式
您想要建立一个迷宫产生程式,迷宫使用二维阵列来定义,0表示道路,1表示墙,2表示宝物,根据所定义的二维迷宫阵列,您想要程式自动产生各种不同材质的迷宫,例如砖墙迷宫,钻石迷宫等等。
您可以在程式中定义两个角色,一个是指导迷宫建立的Director角色,一个是按照指导者指示建立迷宫的Builder角色,Director根据定义的迷宫阵列来指导Builder,只要更换Builder,就可以完成不同材质的迷宫。
MazeDirector.java
public class MazeDirector { private int[][] maze; private IMazeBuilder mazeBuilder; public void setMaze(int[][] maze) { this.maze = maze; } public void setMazeBuilder(IMazeBuilder mazeBuilder) { this.mazeBuilder = mazeBuilder; } public void buildMaze() { for(int i = 0; i < maze.length; i++) { for(int j = 0; j < maze[i].length; j++) { // 由于mazeBuilder是IMazeBuilder型态 // 所以无论Builder实例为何,这边的程式都无需变动 switch (maze[i][j]) { case 0: mazeBuilder.createRoadBloc(); break; case 1: mazeBuilder.createWallBlock(); break; case 2: mazeBuilder. createTreasureBlock(); break; default: System.out.println("undefined"); } } mazeBuilder.nextRow(); } }} public interface IMazeBuilder { public void createRoadBlock(); public void createWallBlock(); public void createTreasureBlock(); public void nextRow();} public class SolidMazeBuilder implements IMazeBuilder { public void createWallBlock() { System.out.print("█"); } public void createRoadBlock() { System.out.print(" "); } public void createTreasureBlock() { System.out.print("$ "); } public void nextRow() { System.out.println(); } } public class DiamondMazeBuilder implements IMazeBuilder { public void createWallBlock() { System.out.print("◇"); } public void createRoadBlock() { System.out.print(" "); } public void createTreasureBlock() { System.out.print("* "); } public void nextRow() { System.out.println(); } }