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

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

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

    1.現(xiàn)實(shí)問題
    面向?qū)ο缶幊炭偸呛同F(xiàn)實(shí)問題的解決思想一致的。


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

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

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

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

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

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

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

    2.開闊天空
    我在學(xué)習(xí)的時(shí)候,把代碼例子認(rèn)真的讀了一遍,便豁然開朗。


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

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

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

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


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

    // 復(fù)雜對(duì)象部件接口Part。
    public interface Part{
        
    //
    }

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

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

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

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

    MazidaBuilder: 具體的產(chǎn)品生成器對(duì)象
    // 實(shí)現(xiàn)具體的產(chǎn)品生成器
    public class MazidaBuilder implements CarBuilder {
        Part partA, partB, partC;

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

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

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

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

    }

    ConstructFactory: Builder模式的重要體現(xiàn)之二---產(chǎn)品組裝工廠。
    // 建立產(chǎn)品組裝工廠,用來(lái)實(shí)現(xiàn)構(gòu)建復(fù)雜對(duì)象的過程。
    class ConstructFactory {
        
    // 工廠里有一個(gè)產(chǎn)品生成器
        private CarBuilder carBuilder;

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


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

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

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

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

    歡迎來(lái)訪!^.^!
    本BLOG僅用于個(gè)人學(xué)習(xí)交流!
    目的在于記錄個(gè)人成長(zhǎng).
    所有文字均屬于個(gè)人理解.
    如有錯(cuò)誤,望多多指教!不勝感激!

    Feedback

    # re: GOF設(shè)計(jì)模式學(xué)習(xí)筆記(三)---Builder模式   回復(fù)  更多評(píng)論   

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

    # re: GOF設(shè)計(jì)模式學(xué)習(xí)筆記(三)---Builder模式   回復(fù)  更多評(píng)論   

    2007-12-02 23:38 by lihe
    public Product getResult() {
    // 返回最后組裝成品結(jié)果
    return new Product(partA,partB,partC);
    }
    ???
    接口能 new???
    你對(duì)builder模式?jīng)]有理解到精華之處,

    同一個(gè)過程創(chuàng)造不同的表示,你應(yīng)該細(xì)細(xì)體會(huì)一下

    # re: GOF設(shè)計(jì)模式學(xué)習(xí)筆記(三)---Builder模式   回復(fù)  更多評(píng)論   

    2009-06-02 14:26 by ads
    你對(duì)builder的理解錯(cuò)誤了

    Copyright © 久城

    主站蜘蛛池模板: 毛片基地看看成人免费| 亚洲国产福利精品一区二区| 亚洲精品456播放| 国产无遮挡吃胸膜奶免费看视频| 最近2019中文字幕mv免费看 | 亚洲视频中文字幕在线| 亚洲av日韩av无码| 亚洲综合一区二区精品导航 | 日韩一区二区免费视频| 日本不卡免费新一二三区| 尤物永久免费AV无码网站| 国产精品va无码免费麻豆| 国产一区二区免费在线| 亚洲午夜AV无码专区在线播放| 亚洲国产精品人人做人人爽| 国产a v无码专区亚洲av | 成人免费无码视频在线网站| 岛国片在线免费观看| 日韩一区二区免费视频| 亚洲熟伦熟女新五十路熟妇| 色噜噜AV亚洲色一区二区| 亚洲国产精品无码专区影院 | 亚洲一区爱区精品无码| 久久久久亚洲精品成人网小说| 亚洲欧洲日韩不卡| 亚洲综合久久精品无码色欲 | 91亚洲自偷手机在线观看| 亚洲国产精品网站久久| 亚洲日韩精品无码专区加勒比☆| 国产偷国产偷亚洲清高APP| 永久免费无码网站在线观看个| 99久久免费国产特黄| 国产91色综合久久免费分享| 四虎www免费人成| 亚洲国产综合久久天堂| 亚洲av日韩av无码| 亚洲美国产亚洲AV| 拍拍拍无挡视频免费观看1000 | 又大又硬又粗又黄的视频免费看 | 男人和女人高潮免费网站 | 亚洲av成本人无码网站|