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

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

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

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    建造者模式

    Posted on 2009-01-20 17:31 非洲小白臉 閱讀(1829) 評論(0)  編輯  收藏 所屬分類: 模式
    設計模式-快餐簡解-【建造者模式】

    建造者模式應用場景舉例
    比如在玩“極品飛車”這款游戲,那么每一關的地圖會千變萬化,簡單的來說,地圖會有晴天和陰天之分,那么創建地圖時就要根據晴天或者陰天來對地圖上的 場景,比如:天空,樹,房子,和路面進行渲染,這個過程是一個固定的,每創建一個新地圖都要執行這幾個渲染,這是針對高級配置的電腦來說的。
    現在擁有低配置電腦的人不在少數,那么他們就不能玩游戲了嗎?完全可以!只要將地圖中占用資源比較高的渲染去掉就可以,比如帶反射光影的樹,這時候需要創建不同的地圖,但地圖的創建過程卻是固定的,建造者模式完全可以應對這樣的情況。

    建造者模式解釋
    類型:創建模式
      將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

    建造者模式UML圖


    建造者模式-JAVA代碼實現
    新建地圖接口:
    package map_package;

    public interface map_interface {

        
    public void create_weather();

        
    public void create_house();

        
    public void create_tree();

        
    public void create_way();

    }


    新建晴天地圖類:

    package map_package;

    public class map_sun implements map_interface {

        
    public void create_weather() {
            System.out.println(
    "晴天");
        }

        
    public void create_house() {
            System.out.println(
    "房了上玻璃發亮");
        }

        
    public void create_tree() {
            System.out.println(
    "樹的顏色是淺綠色");
        }

        
    public void create_way() {
            System.out.println(
    "路面有些干燥");
        }

    }

     

      新建陰天地圖類:

    package map_package;

    public class map_cloudy implements map_interface{

        
    public void create_weather() {
            System.out.println(
    "陰天");
        }

        
    public void create_house() {
            System.out.println(
    "房了上玻璃發暗");
        }

        
    public void create_tree() {
            System.out.println(
    "樹的顏色是深綠色");
        }

        
    public void create_way() {
            System.out.println(
    "路面有些潮濕");
        }

    }


    新建高畫質builder建造者類:

    package map_build;

    import map_package.map_interface;

    public class map_build_adv {

        
    private map_interface map_interface_ref;

        
    public map_build_adv(map_interface map_interface_ref) {
            
    super();
            
    this.map_interface_ref = map_interface_ref;
        }

        
    public void create_map() {
            System.out.println(
    "創建一個高畫質的地圖");
            
    // 創建的順序很重要 從天空往路面創建
            map_interface_ref.create_weather();
            map_interface_ref.create_house();
            map_interface_ref.create_tree();
            map_interface_ref.create_way();

        }

    }


    新建低畫質builder建造者類:

    package map_build;

    import map_package.map_interface;

    public class map_build_low {

        
    private map_interface map_interface_ref;

        
    public map_build_low(map_interface map_interface_ref) {
            
    super();
            
    this.map_interface_ref = map_interface_ref;
        }

        
    public void create_map() {
            System.out.println(
    "創建一個低畫質的地圖");
            
    // 創建的順序很重要 從天空往路面創建
            map_interface_ref.create_weather();
            map_interface_ref.create_house();
            
    // map_interface_ref.create_tree();將創建樹的過程去掉
            map_interface_ref.create_way();

        }

    }


    新建客戶端運行類:

    package run_main;

    import map_build.map_build_adv;
    import map_build.map_build_low;
    import map_package.map_cloudy;
    import map_package.map_sun;

    public class run_main {

        
    public static void main(String[] args) {

            map_cloudy map_cloudy 
    = new map_cloudy();
            map_build_adv map_build_adv 
    = new map_build_adv(map_cloudy);
            map_build_adv.create_map();

            System.out.println();

            map_sun map_sun 
    = new map_sun();
            map_build_low map_build_low 
    = new map_build_low(map_sun);
            map_build_low.create_map();

        }

    }


    程序運行結果如下:

    創建一個高畫質的地圖
    陰天
    房了上玻璃發暗
    樹的顏色是深綠色
    路面有些潮濕

    創建一個低畫質的地圖
    晴天
    房了上玻璃發亮
    路面有些干燥


    從程序中可以看到,建造者模式將不變的創建過程進行封裝,創建的過程與main分法進行分離,這樣內部的創建過程就和表示層的代碼進行分開,有利于創 建過程功能上的修改。另外可以發現,代碼的設計和功能有些類似于facade外觀模式,區別在于,建造者模式目的在于以相同的構建過程通過不同的建造者得 到不同的結果,而外觀模式并不需要不同的建造者,也不希望得到不同的結果,只是簡單的將幾個接口合并成高級的一個接口,不影響原有的結果,目的是使調用變 得更加容易。

      本程序中有2個建造者:高畫者建造者和低畫質建造者,它們都封裝了創建地圖的過程,這個過程很固定,但通過不同的建造者類可以返回不樣式的地圖,建造者規定了對象創建的過程,比如高畫質的建造者的創建過程為:
    map_interface_ref.create_weather();
    map_interface_ref.create_house();
    map_interface_ref.create_tree();
    map_interface_ref.create_way();
    必須得執行4個方法才可以創建一個高畫質的地圖,如果不使用建造者模式,直接調用map類的create_xxxx方法,如果create_xxxx 方法有幾十個,那么很有可能就把其中的某些方法忘記調用而影響最終地圖的效果了,所以我們要使用建造者模式來規定地圖創建的過程,這就是一個“行為守則 ”。


    主站蜘蛛池模板: fc2免费人成在线视频| 污网站免费在线观看| 三级毛片在线免费观看| 免费v片在线观看| 亚洲一区二区视频在线观看| 亚洲av无码不卡私人影院| 边摸边吃奶边做爽免费视频99| 四虎永久在线精品视频免费观看| 亚洲色大成网站www永久网站| 最近最新中文字幕完整版免费高清| 亚洲乱码中文字幕小综合| 野花高清在线观看免费完整版中文| 亚洲人成在线播放| 毛片免费观看的视频| 亚洲第一街区偷拍街拍| www亚洲精品少妇裸乳一区二区 | 大香人蕉免费视频75| JLZZJLZZ亚洲乱熟无码| 久久免费视频一区| 中文字幕亚洲综合精品一区| 黄页视频在线观看免费| 一本色道久久综合亚洲精品高清 | 精品无码AV无码免费专区| 亚洲天堂电影在线观看| a级大片免费观看| 久久亚洲sm情趣捆绑调教| 丁香花在线观看免费观看| 国产成人亚洲午夜电影| 亚洲中久无码永久在线观看同| 国产精品免费高清在线观看| 免费看美女让人桶尿口| 久久久婷婷五月亚洲97号色| 最近中文字幕mv免费高清视频7| 美女18一级毛片免费看| 亚洲AV福利天堂一区二区三 | 又黄又爽一线毛片免费观看 | 666精品国产精品亚洲| 日日夜夜精品免费视频| 亚洲AV无码专区在线亚| 亚洲精品tv久久久久| 57pao一国产成永久免费|