<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 久城 閱讀(4300) 評論(4)  編輯  收藏 所屬分類: GOF設計模式

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


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

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

    這樣做,實現(xiàn)了購買者和生產(chǎn)線的隔離。

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

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

    這樣做,目的是為了實現(xiàn)復雜對象生產(chǎn)線和其部件的解耦。

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

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


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

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

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

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


    Part: 復雜對象的部件接口。沒準有幾種。體現(xiàn)對象的復雜性。即產(chǎn)品部件

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

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

        
    // 創(chuàng)建部件B
        void buildPartB();

        
    // 創(chuàng)建部件C
        void buildPartC();

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

    MazidaBuilder: 具體的產(chǎn)品生成器對象
    // 實現(xiàn)具體的產(chǎn)品生成器
    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模式的重要體現(xiàn)之二---產(chǎn)品組裝工廠
    // 建立產(chǎn)品組裝工廠,用來實現(xiàn)構建復雜對象的過程。
    class ConstructFactory {
        
    // 工廠里有一個產(chǎn)品生成器
        private CarBuilder carBuilder;

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


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

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

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

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

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

    Feedback

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

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

    # 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模式?jīng)]有理解到精華之處,

    同一個過程創(chuàng)造不同的表示,你應該細細體會一下

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

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

    Copyright © 久城

    主站蜘蛛池模板: 精品一区二区三区高清免费观看| 一级成人a毛片免费播放| 国产乱辈通伦影片在线播放亚洲 | 免费人妻无码不卡中文字幕18禁| 日日狠狠久久偷偷色综合免费| 亚洲精品国产品国语在线| 亚洲精品在线免费观看视频| 国产成人亚洲综合在线| 亚洲成A人片在线观看无码不卡| 999国内精品永久免费视频| 无码天堂亚洲国产AV| 亚洲色图国产精品| 日韩中文字幕免费| 国产成人精品免费久久久久| 亚洲中文字幕精品久久| 亚洲欧洲美洲无码精品VA| 91在线视频免费看| 99精品视频免费| 亚洲国产精品99久久久久久| 亚洲AV无码一区二区乱孑伦AS| 免费看AV毛片一区二区三区| 日本一区二区免费看| 亚洲aⅴ无码专区在线观看| 亚洲色成人中文字幕网站| 女性无套免费网站在线看| 日韩电影免费在线观看中文字幕| 亚洲欧美综合精品成人导航| 亚洲久本草在线中文字幕| 免费一级毛片在线播放不收费| 最近在线2018视频免费观看| a一级爱做片免费| 亚洲国产欧美国产综合一区 | 美女内射无套日韩免费播放| 污污免费在线观看| 2020年亚洲天天爽天天噜| 久久精品亚洲中文字幕无码网站| 亚洲av日韩片在线观看| 日韩亚洲欧洲在线com91tv| 永久免费AV无码网站在线观看| 亚洲午夜免费视频| 拍拍拍无挡视频免费观看1000|