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

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

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

    GOF設計模式學習筆記(三)---Builder模式

    Posted on 2007-05-17 10:11 久城 閱讀(4292) 評論(4)  編輯  收藏 所屬分類: GOF設計模式

    1.現實問題
    面向對象編程總是和現實問題的解決思想一致的。


    汽車是如何產生的?這個問題在學習工廠模式中已經舉過例子。我再重新分析一下,看看有何不同。

    Factory模式中:
    1.有一個抽象的工廠。
    2.實現一個具體的工廠---汽車工廠。
    3.工廠生產汽車A,得到汽車產品A。
    4.工廠生產汽車B,得到汽車產品B。

    這樣做,實現了購買者和生產線的隔離。

    Builder模式:
    1.離合器工廠生產離合器產品,得到汽車部件A。
    2.輪胎工廠生產輪子產品,得到汽車部件B。
    3.車身工廠生產車身產品,得到汽車部件C。
    4.將這些部件放到一起,形成剛好能夠組裝成一輛汽車的整體。
    5.將這個整體送到汽車組裝工廠,得到一個汽車產品。

    或者更抽象一點理解:
    1.將汽車的每一個零件都送到汽車組裝工廠。
    2.在工廠里,組裝離合器,得到汽車部件A。
    3.在工廠里,組裝輪胎,得到汽車部件B。
    4.在工廠里,組裝車身,得到汽車部件C。
    5.在工廠里,組裝每個部件,得到一個汽車產品。

    這樣做,目的是為了實現復雜對象生產線和其部件的解耦。

    二者不同在于:
    Factory模式不考慮對象的組裝過程,而直接生成一個我想要的對象。
    Builder模式先一個個的創建對象的每一個部件,再統一組裝成一個對象。
    Factory模式所解決的問題是,工廠生產產品。而Builder模式所解決的問題是工廠控制產品生成器組裝各個部件的過程,然后從產品生成器中得到產品。

    2.開闊天空
    我在學習的時候,把代碼例子認真的讀了一遍,便豁然開朗。


    學習模式的目的在于了解此模式究竟為何模式。了解了此模式的結構已足矣。給我的感覺,模式就是一種思想。學習一個模式,花上一兩個小時把此模式的意思理解了,就夠了。其精華的所在會在以后工作的設計中逐漸體現出來。

    首先,當一個產品(對象)的創建過程很復雜的時候,且這個產品的實現需要分別實現幾個不同的部件。這個時候,我們考慮用到Builder模式。具體實現過程的例子如下:

    Product: 復雜對象類。我們最終就是為了得到它的一個對象。我叫它產品。

    // 這里有一個復雜對象類Product。它的構建需要PartA,PartB,PartC。
    public class Product  {
        
    public Product(Part partA, Part partB, Part partC){...};
    }


    Part: 復雜對象的部件接口。沒準有幾種。體現對象的復雜性。即產品部件。

    // 復雜對象部件接口Part。
    public interface Part{
        
    //
    }

    CarBuilder: 復雜對象的構建接口。Builder模式的重要體現之一---產品生成器。
    // 這里定義一個產品生成器接口。
    public interface CarBuilder {
        
    // 創建部件A
        void buildPartA();

        
    // 創建部件B
        void buildPartB();

        
    // 創建部件C
        void buildPartC();

        
    // 返回產品,不用的組裝過程會返回不同的產品。
        Product getResult();
    }

    MazidaBuilder: 具體的產品生成器對象。
    // 實現具體的產品生成器
    public class MazidaBuilder implements CarBuilder {
        Part partA, partB, partC;

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

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

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

        
    public Product getResult() {
            
    // 返回最后組裝成品結果
            return new Product(partA,partB,partC);
        }

    }

    ConstructFactory: Builder模式的重要體現之二---產品組裝工廠。
    // 建立產品組裝工廠,用來實現構建復雜對象的過程。
    class ConstructFactory {
        
    // 工廠里有一個產品生成器
        private CarBuilder carBuilder;

        
    public ConstructFactory(CarBuilder carBuilder) {
            
    this.carBuilder = carBuilder;
        }


        
    // 在這里實現部件的組裝及汽車的組裝。
        public void construct() {
            
    // 組裝部件A
            carBuilder.buildPartA();
            
    // 組裝部件B
            carBuilder.buildPartB();
            
    // 組裝部件C
            carBuilder.buildPartC();
        }
    // 到此,汽車組裝完畢。
    }

    Temple:
    // 具體得到一個產品的過程
    public static void main(String args[]){
        
    // 建立產品生成器對象
        MazidaBuilder ma6Builder = new MazidaBuilder();
        
    // 建立產品組裝工廠,由工廠操作產品生成器進行組裝。
        ConstructFactory cf = new ConstructFactory( ma6Builder ); 
        
    // 開始組裝。這里,改變工廠的組裝過程,就可以組裝成不同的產品。
        cf.construct(); 
        
    // 組裝完畢
        
    // 從產品生成器中得到產品
        Product product = ma6Builder.getResult(); 
    }

    理解Builder模式,主要就是理解上面這幾個過程。

    Builder模式不是很常用。模式本身就是一種思想。知道了就可以了。

    歡迎來訪!^.^!
    本BLOG僅用于個人學習交流!
    目的在于記錄個人成長.
    所有文字均屬于個人理解.
    如有錯誤,望多多指教!不勝感激!

    Feedback

    # re: GOF設計模式學習筆記(三)---Builder模式   回復  更多評論   

    2007-05-18 09:01 by 大田斗
    模式本身是一種思想?思想是用來指導的。究其目的,不過是在我們開發代碼中提供一種套路。

    # re: GOF設計模式學習筆記(三)---Builder模式   回復  更多評論   

    2007-12-02 23:38 by lihe
    public Product getResult() {
    // 返回最后組裝成品結果
    return new Product(partA,partB,partC);
    }
    ???
    接口能 new???

    # re: GOF設計模式學習筆記(三)---Builder模式 [未登錄]  回復  更多評論   

    2009-03-26 15:59 by alex
    你對builder模式沒有理解到精華之處,

    同一個過程創造不同的表示,你應該細細體會一下

    # re: GOF設計模式學習筆記(三)---Builder模式   回復  更多評論   

    2009-06-02 14:26 by ads
    你對builder的理解錯誤了

    Copyright © 久城

    主站蜘蛛池模板: 久久午夜夜伦鲁鲁片免费无码影视| 亚洲精品少妇30p| 免费国产99久久久香蕉| 亚洲欧美日韩中文字幕在线一区| 亚洲精品国精品久久99热| 亚洲黄色免费电影| 全免费a级毛片免费看| 曰批全过程免费视频免费看| 亚洲国产精品午夜电影| 亚洲毛片αv无线播放一区| 热久久精品免费视频| 成全影视免费观看大全二| 三年片在线观看免费大全电影 | 亚洲AV人无码综合在线观看| 亚洲精品乱码久久久久久不卡| 午夜一区二区免费视频| 国产日本一线在线观看免费| a级毛片毛片免费观看久潮喷| 亚洲av无码成人精品区一本二本| 亚洲人xxx日本人18| 亚洲午夜国产精品无卡| 久久亚洲精品无码网站| 国精产品一区一区三区免费视频| 国产亚洲男人的天堂在线观看| 亚洲人成色77777在线观看| va天堂va亚洲va影视中文字幕| 久久精品国产亚洲AV久| 亚洲日本国产综合高清| 久久乐国产综合亚洲精品| 亚洲欧美aⅴ在线资源| 国产成人亚洲精品91专区高清 | 四虎影视无码永久免费| 亚洲的天堂av无码| 亚洲国产精品无码久久久蜜芽 | 亚洲色婷婷综合久久| 亚洲AV午夜福利精品一区二区| 亚洲自偷自偷精品| 亚洲乱码卡一卡二卡三| 美女被爆羞羞网站免费| 国产精品成人啪精品视频免费 | 亚洲综合精品香蕉久久网97|