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

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

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

    細(xì)心!用心!耐心!

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

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

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

    可以使用下面的UML 類別圖來表示上述的概念:
    Builder
    實際上的程式設(shè)計如下:
    • 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型態(tài)
    // 所以無論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();
    }
    }

    使用下面的程式來測試一下,它將產(chǎn)生兩個迷宮圖形:
    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

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

    Gof 中有給出了一個不錯的例子,以設(shè)計文件剖析器為例,該剖析器可以將文件轉(zhuǎn)換為其它的格式,以DOC文件剖析器為例好了,假設(shè)希望析剖器可以將DOC文件轉(zhuǎn)換為RTF或是PDF文件,可以如下設(shè)計結(jié)構(gòu):
    Builder

    簡單來說,建築者模式適用的場合,在於使得您可以依賴抽象的建築藍圖,而實際建造時可以使用不同的實例,這是其之所以命為Builder的原因.
    posted on 2007-04-17 10:35 張金鵬 閱讀(254) 評論(0)  編輯  收藏 所屬分類: Creational 模式
    主站蜘蛛池模板: 亚洲五月六月丁香激情| 国产91久久久久久久免费| 亚洲AV一宅男色影视| 一个人看www免费高清字幕| 免费在线视频一区| 一级毛片免费观看不收费| 亚洲成年看片在线观看| 污视频网站免费观看| 亚洲精品第一国产综合精品99| 免费看一级高潮毛片| 亚洲精品久久久www| 国产黄在线观看免费观看不卡| 国产中文在线亚洲精品官网| 99久久免费国产精精品| 亚洲国产成人精品无码区在线观看| 永久免费AV无码网站国产| 亚洲日韩图片专区第1页| h视频在线免费看| 日本亚洲免费无线码| 免费人成无码大片在线观看| 一级黄色免费大片| 久久久亚洲欧洲日产国码农村| 99ee6热久久免费精品6| 伊人久久亚洲综合影院首页| 国产免费AV片无码永久免费| 久久av免费天堂小草播放| 亚洲人成网www| 在线观看人成网站深夜免费| 免费国产黄网站在线观看动图 | 中文字幕一区二区免费| 久久久久亚洲AV无码网站| 最近的免费中文字幕视频| 一级毛片免费在线播放| 亚洲午夜久久久精品影院| 四虎成人免费观看在线网址 | 最近免费mv在线观看动漫| 亚洲一区在线免费观看| 日本亚洲国产一区二区三区| 亚洲精品视频免费在线观看| 青青免费在线视频| 亚洲黄色三级网站|