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

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

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

    爪哇一角

    共同探討STRUTS#HIBERNATE#SPRING#EJB等技術(shù)
    posts - 3, comments - 6, trackbacks - 0, articles - 99
      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    建造者模式

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

    建造者模式應(yīng)用場(chǎng)景舉例
    比如在玩“極品飛車”這款游戲,那么每一關(guān)的地圖會(huì)千變?nèi)f化,簡(jiǎn)單的來(lái)說(shuō),地圖會(huì)有晴天和陰天之分,那么創(chuàng)建地圖時(shí)就要根據(jù)晴天或者陰天來(lái)對(duì)地圖上的 場(chǎng)景,比如:天空,樹(shù),房子,和路面進(jìn)行渲染,這個(gè)過(guò)程是一個(gè)固定的,每創(chuàng)建一個(gè)新地圖都要執(zhí)行這幾個(gè)渲染,這是針對(duì)高級(jí)配置的電腦來(lái)說(shuō)的。
    現(xiàn)在擁有低配置電腦的人不在少數(shù),那么他們就不能玩游戲了嗎?完全可以!只要將地圖中占用資源比較高的渲染去掉就可以,比如帶反射光影的樹(shù),這時(shí)候需要?jiǎng)?chuàng)建不同的地圖,但地圖的創(chuàng)建過(guò)程卻是固定的,建造者模式完全可以應(yīng)對(duì)這樣的情況。

    建造者模式解釋
    類型:創(chuàng)建模式
      將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

    建造者模式UML圖


    建造者模式-JAVA代碼實(shí)現(xiàn)
    新建地圖接口:
    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(
    "房了上玻璃發(fā)亮");
        }

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

        
    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(
    "房了上玻璃發(fā)暗");
        }

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

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

    }


    新建高畫(huà)質(zhì)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(
    "創(chuàng)建一個(gè)高畫(huà)質(zhì)的地圖");
            
    // 創(chuàng)建的順序很重要 從天空往路面創(chuàng)建
            map_interface_ref.create_weather();
            map_interface_ref.create_house();
            map_interface_ref.create_tree();
            map_interface_ref.create_way();

        }

    }


    新建低畫(huà)質(zhì)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(
    "創(chuàng)建一個(gè)低畫(huà)質(zhì)的地圖");
            
    // 創(chuàng)建的順序很重要 從天空往路面創(chuàng)建
            map_interface_ref.create_weather();
            map_interface_ref.create_house();
            
    // map_interface_ref.create_tree();將創(chuàng)建樹(shù)的過(guò)程去掉
            map_interface_ref.create_way();

        }

    }


    新建客戶端運(yùn)行類:

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

        }

    }


    程序運(yùn)行結(jié)果如下:

    創(chuàng)建一個(gè)高畫(huà)質(zhì)的地圖
    陰天
    房了上玻璃發(fā)暗
    樹(shù)的顏色是深綠色
    路面有些潮濕

    創(chuàng)建一個(gè)低畫(huà)質(zhì)的地圖
    晴天
    房了上玻璃發(fā)亮
    路面有些干燥


    從程序中可以看到,建造者模式將不變的創(chuàng)建過(guò)程進(jìn)行封裝,創(chuàng)建的過(guò)程與main分法進(jìn)行分離,這樣內(nèi)部的創(chuàng)建過(guò)程就和表示層的代碼進(jìn)行分開(kāi),有利于創(chuàng) 建過(guò)程功能上的修改。另外可以發(fā)現(xiàn),代碼的設(shè)計(jì)和功能有些類似于facade外觀模式,區(qū)別在于,建造者模式目的在于以相同的構(gòu)建過(guò)程通過(guò)不同的建造者得 到不同的結(jié)果,而外觀模式并不需要不同的建造者,也不希望得到不同的結(jié)果,只是簡(jiǎn)單的將幾個(gè)接口合并成高級(jí)的一個(gè)接口,不影響原有的結(jié)果,目的是使調(diào)用變 得更加容易。

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


    主站蜘蛛池模板: 东方aⅴ免费观看久久av| 香蕉大伊亚洲人在线观看| 亚洲乱码中文字幕久久孕妇黑人| 又黄又爽的视频免费看| 国产精品四虎在线观看免费| 日本一道高清不卡免费| 国产一卡二卡≡卡四卡免费乱码| 日本不卡免费新一二三区| vvvv99日韩精品亚洲| 亚洲Av无码乱码在线观看性色 | 理论亚洲区美一区二区三区| 亚洲国产美女精品久久久| 国产精品亚洲av色欲三区| 无套内射无矿码免费看黄| 免费大黄网站在线看| 亚洲AV伊人久久青青草原 | 色欲A∨无码蜜臀AV免费播 | 有码人妻在线免费看片| 亚洲一级片免费看| 免费人成网站在线观看不卡| 91精品国产免费久久国语麻豆| 91免费人成网站在线观看18| 久久国产精品免费一区二区三区| 三级黄色片免费看| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 国产亚洲高清不卡在线观看| 久久丫精品国产亚洲av不卡| 亚洲午夜电影在线观看| 精品日韩99亚洲的在线发布| 色屁屁www影院免费观看视频| 亚洲欧洲专线一区| 色在线亚洲视频www| 亚洲avav天堂av在线网毛片| 九一在线完整视频免费观看| 小日子的在线观看免费| 丁香花在线观看免费观看| 亚洲男人第一无码aⅴ网站| 亚洲精选在线观看| 亚洲乱理伦片在线观看中字| j8又粗又长又硬又爽免费视频| 69视频免费在线观看|