<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 模式
    主站蜘蛛池模板: 久久久久亚洲AV成人无码网站| 亚洲午夜久久久久久噜噜噜| 亚洲成人在线免费观看| 最近免费视频中文字幕大全| 亚洲精品私拍国产福利在线| 久久精品国产这里是免费| 亚洲激情视频在线观看| 在线观看www日本免费网站| 亚洲精品一区二区三区四区乱码| 曰批视频免费40分钟试看天天 | 国产亚洲精品成人AA片新蒲金| 日韩电影免费在线观看网址| 久久亚洲2019中文字幕| 天堂在线免费观看| 亚洲三级电影网站| 99久久久精品免费观看国产| 亚洲另类无码一区二区三区| 亚洲国产精品尤物YW在线观看| 久久久WWW免费人成精品| 久久精品九九亚洲精品| 青苹果乐园免费高清在线| 国产亚洲漂亮白嫩美女在线| 国产91精品一区二区麻豆亚洲| 久久精品乱子伦免费| 亚洲欧洲日韩综合| 国产精品另类激情久久久免费| 亚洲精品国产日韩无码AV永久免费网| 亚洲av无码一区二区三区乱子伦 | 99re6热视频精品免费观看| 亚洲乱码日产精品BD在线观看| 日本免费观看网站| 中文字幕免费观看视频| 亚洲白色白色在线播放| 国产成人免费a在线视频app | 日本人的色道免费网站| 真正全免费视频a毛片| 亚洲国产精品无码专区| 在线观看免费大黄网站| 免费人成在线观看视频高潮| 亚洲五月综合网色九月色| 不卡精品国产_亚洲人成在线|