<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    細心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

    BlogJava 聯系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks
    您想要建立一個迷宮產生程式,迷宮使用二維陣列來定義,0表示道路,1表示牆,2表示寶物,根據所定義的二維迷宮陣列,您想要程式自動產生各種不同材質的迷宮,例如磚牆迷宮,鑽石迷宮等等。

    您可以在程式中定義兩個角色,一個是指導迷宮建立的Director角色,一個是按照指導者指示建立迷宮的Builder角色,Director根據定義的迷宮陣列來指導Builder,只要更換Builder,就可以完成不同材質的迷宮。

    可以使用下面的UML 類別圖來表示上述的概念:
    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.createRoadBlock();
    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();
    }
    }

    使用下面的程式來測試一下,它將產生兩個迷宮圖形:
    public class Main {
    public static void main(String[] args) {
    int[][] maze = {{1, 1, 1, 1, 1, 1, 1},
    {1, 0, 0, 0, 0, 2, 1},
    {1, 0, 1, 0, 1, 0, 1},
    {1, 0, 2, 1, 0, 1, 1},
    {1, 1, 0, 1, 0, 1, 1},
    {1, 0, 0, 2, 0, 0, 1},
    {1, 1, 1, 1, 1, 1, 1}};

    MazeDirector mazeDirector = new MazeDirector();
    mazeDirector.setMaze(maze);

    System.out.println("Build SolidMaze....");
    mazeDirector.setMazeBuilder(new SolidMazeBuilder());
    mazeDirector.buildMaze();

    System.out.println("Build DiamondMaze....");

    mazeDirector.setMazeBuilder(
    new DiamondMazeBuilder());
    mazeDirector.buildMaze();
    }
    }

    Builder

    在迷宮例子中並沒有產生或返回產品物件,這視您的需求而定,迷宮例子只是將結果輸出至主控臺,您也可以設計一個產品物件,或是將結果直接輸出為文件。

    Gof 中有給出了一個不錯的例子,以設計文件剖析器為例,該剖析器可以將文件轉換為其它的格式,以DOC文件剖析器為例好了,假設希望析剖器可以將DOC文件轉換為RTF或是PDF文件,可以如下設計結構:
    Builder

    簡單來說,建築者模式適用的場合,在於使得您可以依賴抽象的建築藍圖,而實際建造時可以使用不同的實例,這是其之所以命為Builder的原因.
    posted on 2007-04-17 10:35 張金鵬 閱讀(247) 評論(0)  編輯  收藏 所屬分類: Creational 模式
    主站蜘蛛池模板: 久久免费精品一区二区| 精品久久久久久无码免费 | 四虎精品成人免费视频| 色视频色露露永久免费观看| 久久久国产亚洲精品| 免费黄网在线观看| 豆国产96在线|亚洲| 哒哒哒免费视频观看在线www| 美女被羞羞网站免费下载| 四虎影视在线永久免费看黄| 污视频网站在线观看免费| 亚洲一级Av无码毛片久久精品 | 成在人线av无码免费高潮水| 国产亚洲婷婷香蕉久久精品| 少妇人妻偷人精品免费视频| 亚洲理论片在线观看| 免费无码精品黄AV电影| 亚洲av成人一区二区三区观看在线| 日本免费电影一区| 四虎国产精品成人免费久久 | 国产A在亚洲线播放| 99re在线视频免费观看| 亚洲不卡中文字幕| 免费大黄网站在线看| 国产在线精品免费aaa片| 亚洲成a人片在线观看播放| 成人毛片免费播放| 一级免费黄色毛片| 91情国产l精品国产亚洲区 | 亚洲国产精品ⅴa在线观看| 国产大片线上免费看| 中文字幕一区二区三区免费视频 | 国产美女精品久久久久久久免费| h视频在线免费观看| 亚洲一区电影在线观看| 国产一区二区免费在线| 久久狠狠躁免费观看2020| 亚洲精品无码国产片| 亚洲人成人网站色www| 大学生美女毛片免费视频| 精品久久久久久国产免费了|