<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 久城 閱讀(4291) 評論(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 © 久城

    主站蜘蛛池模板: 亚洲中文字幕在线无码一区二区| 一级中文字幕免费乱码专区| 亚洲免费在线播放| 亚洲国产精品无码久久久不卡| 色久悠悠婷婷综合在线亚洲| 美女被免费网站视频在线| 免费看国产曰批40分钟| jizz在线免费播放| 久久亚洲精品无码播放| 一级毛片**免费看试看20分钟| 18以下岁毛片在免费播放| 亚洲AV人无码激艳猛片| 57pao一国产成永久免费| 亚洲AV无码专区在线亚| 成人性生免费视频| 又大又硬又粗又黄的视频免费看 | 亚洲黄片手机免费观看| 怡红院亚洲红怡院在线观看| 国产成人高清精品免费鸭子| 免费在线观看亚洲| 亚洲欧洲日产国码无码网站| 97久久免费视频| 亚洲色精品VR一区区三区| 免费人成视频在线观看视频| 国产精品免费一区二区三区| 亚洲福利视频导航| 午夜毛片不卡免费观看视频| 五月婷婷免费视频| 亚洲系列国产精品制服丝袜第| 两个人日本WWW免费版| 亚洲欧洲∨国产一区二区三区| 日本亚洲高清乱码中文在线观看| 免费看又黄又无码的网站| 亚洲综合偷自成人网第页色| 性色av免费观看| 免费观看一区二区三区| 亚洲国产精品人久久电影| 大胆亚洲人体视频| 无码国产精品一区二区免费式芒果 | 成年人免费视频观看| 久久久精品国产亚洲成人满18免费网站|