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

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

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

    posts - 262,  comments - 221,  trackbacks - 0

    一、對Builder模式解耦“過程”和“部件”的理解:

    首先以組裝汽車為例,一部汽車可以由發動機、方向盤、車輪等部件組成,而要把這些部件組裝成一部完整的汽車則需要一個復雜的過程。相同的部件在不同的汽車工廠組裝出來的就成為不一樣的汽車。這就是Builder模式的最原始需求原型

    從中我們可以看出,如果我們能夠提供這樣一種服務:客戶只需要提供給我們必要的零件,并告知我們最終要組裝成的汽車類型,由汽車裝配公司負責整個后端的裝配工作-對客戶來說是完全透明的。那么我們將可以實現“部件”和“過程”的解耦。只要我們愿意,相同的部件在我們的手里就可以變成不同的產品

    二、Builder模式的各個組成部分:

    對Builder模式組成的理解,我們可以從兩個不同的角度來看--客戶和工廠

    首先從客戶的角度來看,客戶能夠看到、感受到的只有產品和部件,從工廠的角度來看,他們感興趣的是如何生產這些零件以及如何把這些零件組裝成一個合格的產品。

    所以我們可以將Builder模式分成四個組成部分:

    ·產品:public interface Product

    ·零件:Public interface Part

    ·生產零件的過程:public interfact Builder

    ·組裝零件的過程:public class Director

    其中產品、零件都是一個接口,其下面可以有多個實現子類。我們重點關注的“生產零件的過程”和“組裝零件的過程”

    同樣類型的產品其“生產零件的過程”不盡相同,所以我們必須將其定義成一個接口,由各個零件的生產廠家去實現具體的過程。如下所示:

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

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

    public class ConcreteBuilder implements Builder {
         Part partA, partB, partC;

      public void buildPartA() {//這里是具體如何構建partA的代碼};
      public void buildPartB() {//這里是具體如何構建partB的代碼};
      public void buildPartC() {//這里是具體如何構建partB的代碼}; 

         public Product getResult() {
        //返回最后組裝成品結果
      };
    }

    OK,既然已經廠家已經知道了如何生產零件了,那么剩下來的事情就是:1). 根據客戶要求去生產這些零件 2). 組裝零件成產品

    組裝成品由Director類負責,它負責和具體的Builder類交互,告訴Builder我要生產零件,將Builder類生產好的零件組裝成成品,如下所示:

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

    三、Builer模式的使用:

    ·創建一個Builer對象:          Builder builer = new ConcreteBuiler();
    ·創建一個Director對象:       Director director = new Director(builder);
    ·調用Director對象構建產品:director.construct();
    ·返回構建好的產品:             Product product = builder.getResult();
     



    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-01-02 23:01 Paul Lin 閱讀(528) 評論(0)  編輯  收藏 所屬分類: 模式與重構
    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av无码国产精品色在线看不卡| 日韩精品极品视频在线观看免费| 69天堂人成无码麻豆免费视频| 久久精品国产精品亚洲艾| 久久精品成人免费国产片小草| mm1313亚洲精品无码又大又粗 | 亚洲精品久久无码av片俺去也| 免费精品国产自产拍在| 亚洲综合色区中文字幕| 国产人成免费视频网站| 亚洲看片无码在线视频| 青青青青青青久久久免费观看| 亚洲AV无码之国产精品| 四虎影视免费永久在线观看| 一级黄色片免费观看| 亚洲av中文无码乱人伦在线咪咕| 欧洲精品99毛片免费高清观看| 噜噜噜亚洲色成人网站∨| 97人妻无码一区二区精品免费| 久久亚洲精品无码av| 在线播放亚洲第一字幕| 中文字幕免费视频| 成人区精品一区二区不卡亚洲| 免费A级毛片无码A| 日本免费久久久久久久网站| 久久精品亚洲一区二区三区浴池 | 亚洲中文字幕视频国产| 999zyz**站免费毛片| 亚洲福利一区二区三区| 国产色爽女小说免费看| 久青草视频在线观看免费| 亚洲国产精品第一区二区| 最近的中文字幕大全免费版| 无套内射无矿码免费看黄| 亚洲狠狠综合久久| 热99re久久精品精品免费| 精品无码国产污污污免费网站国产| 久久91亚洲精品中文字幕| 毛片视频免费观看| 日韩a级无码免费视频| 亚洲人成综合网站7777香蕉|