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

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

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

    posts - 73,  comments - 55,  trackbacks - 0
    Builder模式定義:
    將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示.

    Builder模式是一步一步創建一個復雜的對象,它允許用戶可以只通過指定復雜對象的類型和內容就可以構建它們.用戶不知道內部的具體構建細節.Builder模式是非常類似抽象工廠模式,細微的區別大概只有在反復使用中才能體會到.

    為何使用?
    是為了將構建復雜對象的過程和它的部件解耦.注意: 是解耦過程部件.

    因為一個復雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪 方向盤 發動機還有各種小零件等等,部件很多,但遠不止這些,如何將這些部件裝配成一輛汽車,這個裝配過程也很復雜(需要很好的組裝技術),Builder模式就是為了將部件和組裝過程分開.

    如何使用?
    首先假設一個復雜對象是由多個部件組成的,Builder模式是把復雜對象的創建和部件的創建分別開來,分別用Builder類和Director類來表示.

    首先,需要一個接口,它定義如何創建復雜對象的各個部件:

    public interface Builder {

      //創建部件A  比如創建汽車車輪
      void buildPartA();
      //創建部件B 比如創建汽車方向盤
      void buildPartB();
      //創建部件C 比如創建汽車發動機
      void buildPartC();

      //返回最后組裝成品結果 (返回最后裝配好的汽車)
      //成品的組裝過程不在這里進行,而是轉移到下面的Director類中進行.
      //從而實現了解耦過程部件
      Product getResult();

    }

    用Director構建最后的復雜對象,而在上面Builder接口中封裝的是如何創建一個個部件(復雜對象是由這些部件組成的),也就是說Director的內容是如何將部件最后組裝成成品:

    public class Director {

      private Builder builder;

      public Director( Builder builder ) {
        this.builder = builder;
      }
      // 將部件partA partB partC最后組成復雜對象
      //這里是將車輪 方向盤和發動機組裝成汽車的過程
      public void construct() {
        builder.buildPartA();
        builder.buildPartB();
        builder.buildPartC();

      }

    }

    Builder的具體實現ConcreteBuilder:
    通過具體完成接口Builder來構建或裝配產品的部件;
    定義并明確它所要創建的是什么具體東西;
    提供一個可以重新獲取產品的接口:

    public class ConcreteBuilder implements Builder {

      Part partA, partB, partC;
      public void buildPartA() {
        //這里是具體如何構建partA的代碼

      };
      public void buildPartB() {
        //這里是具體如何構建partB的代碼
      };
       public void buildPartC() {
        //這里是具體如何構建partB的代碼
      };
       public Product getResult() {
        //返回最后組裝成品結果
      };

    }

    復雜對象:產品Product:

    public interface Product { }

    復雜對象的部件:

    public interface Part { }


    我們看看如何調用Builder模式:
    ConcreteBuilder builder = new ConcreteBuilder();
    Director director = new Director( builder );

    director.construct();
    Product product = builder.getResult();
    -------------------------------------------------
    通俗講解:Builder模式的理解


    簡單地說,就好象我要一座房子住,可是我不知道怎么蓋(簡單的砌墻,層次較低),也不知道怎么樣設計(建幾個房間,幾個門好看,層次較高), 于是我需要找一幫民工,他們會砌墻,還得找個設計師,他知道怎么設計,我還要確保民工聽設計師的領導,而設計師本身也不干活,光是下命令,這里砌一堵墻,這里砌一扇門,這樣民工開始建設,最后,我可以向民工要房子了。在這個過程中,設計師是什么也沒有,除了他在腦子里的設計和命令,所以要房子也是跟民工要,記住了!

    就象國內好多企業上erp一樣,上erp,首先得找軟件公司呀,找到軟件公司后,軟件公司說,我只知道怎么寫軟件,就知道怎么實現,不清楚整個erp的流程。好,那我們還得找一個咨詢公司,好,找到德勤了,德勤說好,我要軟件怎么做,軟件公司怎么做,我就能保證軟件能為你們提供erp系統了。

    此模式是為了讓設計和施工解耦,互不干擾。


    package builder;

    public interface Builder
    {
    public? void makeWindow();
    public? void makeFloor();
    public? Room? getRoom();

    }


    /*************************************************************/
    package builder;

    public class Designer {

    ? public Designer() {
    ? }
    ? public void order(Builder? builder)?
    {
    ? builder.makeWindow();
    ? builder.makeFloor();

    }
    }

    /*************************************************************/
    package builder;
    public class Mingong? implements Builder{
    ? private? String window="";
    ? private? String floor="";
    ? public Mingong() {
    ? }
    ? public? void makeWindow(){
    ? window=new String("window");
    ? }
    ? public? void makeFloor(){
    ? floor=new String("floor");
    ? }
    ? public? Room? getRoom()
    ? {
    ? if((!window.equals(""))&&(!floor.equals("")))
    ??? {
    ??? Room r = new Room();
    ??? r.setFloor(floor);
    ??? r.setWindow(window);
    ??? return r;
    ??? }
    ? else return null;
    ? }
    }

    /*************************************************************/
    package builder;
    public class Room {
    ? private? String window="";
    ? private? String floor="";
    ? public Room() {
    ? }
    ?public String getFloor() {
    ??return floor;
    ?}

    ?public void setFloor(String floor) {
    ??this.floor = floor;
    ?}

    ?public String getWindow() {
    ??return window;
    ?}

    ?public void setWindow(String window) {
    ??this.window = window;
    ?}
    }
    /*************************************************************/

    package builder;

    public class Client {

    ? public Client() {
    ? }
    ? public static void main(String[] args) {
    ???? Builder mingong=new Mingong();
    ???? Designer? designer=new????? Designer();
    ???? designer.order(mingong);
    ?????Room r?= mingong.getRoom();
    ???? System.out.println(r.getWindow);//會輸出window,表示構建成功。
    ? }
    }

    posted on 2006-07-24 15:19 保爾任 閱讀(4363) 評論(4)  編輯  收藏 所屬分類: Design Patten

    FeedBack:
    # re: Builder(生成器)模式
    2010-11-15 18:51 | 南通SEO
    受教了  回復  更多評論
      
    # re: Builder(生成器)模式[未登錄]
    2012-11-05 16:49 | lb
    眾里尋他千百度 這才是我要的文章 謝謝分享  回復  更多評論
      
    # re: Builder(生成器)模式[未登錄]
    2013-02-27 13:55 | hgd
    設計和施工不要相互影響  回復  更多評論
      
    # re: Builder(生成器)模式
    2015-09-01 22:53 | 憂桑的可樂雞
    果斷收藏  回復  更多評論
      

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(4)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成年午夜视频免费观看视频| 特级毛片全部免费播放| 亚欧免费视频一区二区三区| 亚洲一卡2卡3卡4卡乱码 在线| 国产成人无码免费视频97| 最近国语视频在线观看免费播放| 亚洲精品视频在线播放| 国产成人免费网站在线观看| 曰批全过程免费视频在线观看无码| 亚洲午夜精品国产电影在线观看| 免费真实播放国产乱子伦| 久久一区二区三区免费播放| 亚洲高清毛片一区二区| 国产亚洲精品资源在线26u| 999在线视频精品免费播放观看| 日韩亚洲翔田千里在线| 久久久久亚洲AV片无码| 国产男女性潮高清免费网站| 特级无码毛片免费视频尤物| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲AV无码不卡在线播放| 国产免费观看网站| 天天影视色香欲综合免费| 国产福利在线观看永久免费| 中文字幕亚洲码在线| 久久久亚洲精品国产| 大胆亚洲人体视频| 一级女人18毛片免费| 伊人久久大香线蕉免费视频| 亚洲精品久久无码| 亚洲图片激情小说| 亚洲成AV人片在| 国产精品V亚洲精品V日韩精品 | 亚洲综合无码一区二区痴汉| 亚洲成AV人片一区二区密柚| 免费一级国产生活片| 无码日韩精品一区二区免费| 一级毛片全部免费播放| 成全视成人免费观看在线看| 国产精品亚洲一区二区三区久久 | 亚洲毛片一级带毛片基地|