首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Design Pattern: Builder 方式

2012-09-21 
Design Pattern: Builder 模式您想要建立一个迷宫产生程式,迷宫使用二维阵列来定义,0表示道路,1表示墙,2表

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


IMazeBuilder.java
public interface IMazeBuilder {      public void createRoadBlock();      public void createWallBlock();      public void createTreasureBlock();      public void nextRow();} 


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


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


简单来说,建筑者模式适用的场合,在于使得您可以依赖抽象的建筑蓝图,而实际建造时可以使用不同的实例,这是其之所以命为Builder的原因。

文章转自 http://www.riabook.cn/doc/designpattern/BuilderPattern.htm

热点排行