熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java高級技術 >> 正文

設計模式-快餐簡解-【建造者模式】

2013-11-23 19:50:34  來源: Java高級技術 

  【建造者模式應用場景舉例

  比如在玩極品飛車這款游戲那麼每一關的地圖會千變萬化簡單的來說地圖會有晴天和陰天之分那麼創建地圖時就要根據晴天或者陰天來對地圖上的場景比如天空房子和路面進行渲染這個過程是一個固定的每創建一個新地圖都要執行這幾個渲染這是針對高級配置的電腦來說的

  現在擁有低配置電腦的人不在少數那麼他們就不能玩游戲了嗎?完全可以!只要將地圖中占用資源比較高的渲染去掉就可以比如帶反射光影的樹這時候需要創建不同的地圖但地圖的創建過程卻是固定的建造者模式完全可以應對這樣的情況

  【建造者模式解釋

  類型創建模式

  將一個復雜對象的構建與它的表示分離使得同樣的構建過程可以創建不同的表示

  【建造者模式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() {
        Systemoutprintln(晴天);
    }

    public void create_house() {
        Systemoutprintln(房了上玻璃發亮);
    }

    public void create_tree() {
        Systemoutprintln(樹的顏色是淺綠色);
    }

    public void create_way() {
        Systemoutprintln(路面有些干燥);
    }

}

  新建陰天地圖類

   package map_package;

public class map_cloudy implements map_interface{

    public void create_weather() {
        Systemoutprintln(陰天);
    }

    public void create_house() {
        Systemoutprintln(房了上玻璃發暗);
    }

    public void create_tree() {
        Systemoutprintln(樹的顏色是深綠色);
    }

    public void create_way() {
        Systemoutprintln(路面有些潮濕);
    }

}

  新建高畫質builder建造者類

   package map_build;

import map_packagemap_interface;

public class map_build_adv {

    private map_interface map_interface_ref;

    public map_build_adv(map_interface map_interface_ref) {
        super();
        thismap_interface_ref = map_interface_ref;
    }

    public void create_map() {
        Systemoutprintln(創建一個高畫質的地圖);
        // 創建的順序很重要 從天空往路面創建
        map_interface_refcreate_weather();
        map_interface_refcreate_house();
        map_interface_refcreate_tree();
        map_interface_refcreate_way();

    }

}

  新建低畫質builder建造者類

   package map_build;

import map_packagemap_interface;

public class map_build_low {

    private map_interface map_interface_ref;

    public map_build_low(map_interface map_interface_ref) {
        super();
        thismap_interface_ref = map_interface_ref;
    }

    public void create_map() {
        Systemoutprintln(創建一個低畫質的地圖);
        // 創建的順序很重要 從天空往路面創建
        map_interface_refcreate_weather();
        map_interface_refcreate_house();
        // map_interface_refcreate_tree();將創建樹的過程去掉
        map_interface_refcreate_way();

    }

}

  新建客戶端運行類

   package run_main;

import map_buildmap_build_adv;
import map_buildmap_build_low;
import map_packagemap_cloudy;
import map_packagemap_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_advcreate_map();

        Systemoutprintln();

        map_sun map_sun = new map_sun();
        map_build_low map_build_low = new map_build_low(map_sun);
        map_build_lowcreate_map();

    }

}

  程序運行結果如下

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

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

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

  本程序中有個建造者高畫者建造者和低畫質建造者它們都封裝了創建地圖的過程這個過程很固定但通過不同的建造者類可以返回不樣式的地圖建造者規定了對象創建的過程比如高畫質的建造者的創建過程為

   map_interface_refcreate_weather();
map_interface_refcreate_house();
map_interface_refcreate_tree();
map_interface_refcreate_way();

  必須得執行個方法才可以創建一個高畫質的地圖如果不使用建造者模式直接調用map類的create_xxxx方法如果create_xxxx方法有幾十個那麼很有可能就把其中的某些方法忘記調用而影響最終地圖的效果了所以我們要使用建造者模式來規定地圖創建的過程這就是一個行為守則

  【建造者模式MyEclipse項目JAVA代碼實現

  建造者模式builder示例代碼點擊


From:http://tw.wingwit.com/Article/program/Java/gj/201311/27540.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.