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

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

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

    創(chuàng)建模式-Builder模式

    一:使用場景

       1)使用到的地方:如果你想創(chuàng)建類似汽車這樣的對象,首先要?jiǎng)?chuàng)建輪子,玻璃,桌椅,發(fā)動(dòng)機(jī),外廓等,這些部件都創(chuàng)建好后,最后創(chuàng)建汽車成品,部件的創(chuàng)建和汽車的組裝過程本身都很復(fù)雜的情況,希望把部件的創(chuàng)建和成品的組裝分開來做,這樣把要做的事情分割開來,降低對象實(shí)現(xiàn)的復(fù)雜度,也降低以后成本的維護(hù),把汽車的部件創(chuàng)建和組裝過程獨(dú)立出兩個(gè)對應(yīng)的工廠來做,有點(diǎn)類似建立兩個(gè)對應(yīng)的部件創(chuàng)建工廠和汽車組裝工廠兩個(gè)工廠,而工廠只是創(chuàng)建一個(gè)成品,并沒有把里面的步驟也獨(dú)立出來,應(yīng)該說Builder模式比工廠模式又進(jìn)了一步。

        2)采用Builder模式后的好處:把一個(gè)負(fù)責(zé)的對象的創(chuàng)建過程分解,把一個(gè)對象的創(chuàng)建分成兩個(gè)對象來負(fù)責(zé)創(chuàng)建,代碼更有利于維護(hù),可擴(kuò)性比較好。

       3)采用Builder模式后的壞處:實(shí)現(xiàn)起來,對應(yīng)的接口以及部件的對象的創(chuàng)建比較多,代碼相對來講,比較多了,估計(jì)剛開始你會有點(diǎn)暈,這個(gè)可以考慮代碼精簡的問題,增加代碼的可讀性。  

    二:一個(gè)實(shí)際的例子

    汽車的組裝

      1)首先創(chuàng)建汽車這個(gè)成品對象,包含什么的成員

    public class Car implements Serializable{

    /**
    * 汽車序列號
    */
    private static final long serialVersionUID = 1L;

    /**汽車輪子*/
    private Wheel wheel;

    /**汽車發(fā)動(dòng)機(jī)*/
    private Engine engine;

    /**汽車玻璃*/
    private Glass glass;

    /**汽車座椅*/
    private Chair chair;


    public Wheel getWheel() {
       return wheel;
    }

    public void setWheel(Wheel wheel) {
       this.wheel = wheel;
    }

    public Engine getEngine() {
       return engine;
    }

    public void setEngine(Engine engine) {
       this.engine = engine;
    }

    public Glass getGlass() {
       return glass;
    }

    public void setGlass(Glass glass) {
       this.glass = glass;
    }

    public Chair getChair() {
       return chair;
    }

    public void setChair(Chair chair) {
       this.chair = chair;
    }

    }

    2)創(chuàng)建對應(yīng)汽車零部件

    public class Wheel {
    public Wheel(){
       print("--汽車輪子構(gòu)建完畢--");
    }
    }

    public class Engine {
    public Engine(){
       print("--汽車發(fā)動(dòng)機(jī)構(gòu)建完畢--");
    }
    }

    public class Glass {
    public Glass(){
       print("--汽車玻璃構(gòu)建完畢--");
    }
    }

    public class Chair {
    public Chair(){
       print("--汽車座椅構(gòu)建完畢--");
    }
    }

    3)開始重點(diǎn)了,汽車成品的組裝過程

       public interface Builder {
    /**組裝汽車輪子*/
    public void buildWheel();

    /**組裝汽車發(fā)動(dòng)機(jī)*/
    public void buildEngine();

    /**組裝汽車玻璃*/
    public void buildGlass();

    /**組裝汽車座椅*/
    public void buildChair();

    /**返回組裝好的汽車*/
    public Car getCar();
    }

    以及實(shí)現(xiàn)類

    public class CarBuilder implements Builder {
    /**汽車成品*/
    private Car car;

    public CarBuilder(){
       car=new Car();
    }

    /**組裝汽車輪子*/
    @Override
    public void buildChair() {
       car.setChair(new Chair());
    }

    /**組裝汽車發(fā)動(dòng)機(jī)*/
    @Override
    public void buildEngine() {
       car.setEngine(new Engine());
    }

    /**組裝汽車玻璃*/
    @Override
    public void buildGlass() {
       car.setGlass(new Glass());
    }

    /**組裝汽車座椅*/
    @Override
    public void buildWheel() {
       car.setWheel(new Wheel());
    }

    /**返回組裝好的汽車*/
    @Override
    public Car getCar() {
       buildChair();
       buildEngine();
       buildGlass();
       buildWheel();
       print("--整個(gè)汽車構(gòu)建完畢--");
       return car;
    }

    }

    4)最后汽車創(chuàng)建測試

       public static void main(String[] args) {
       /**創(chuàng)建汽車組裝*/
       Builder carBuilder=new CarBuilder();
       Car car=carBuilder.getCar();
    }

       最后輸出:

    --汽車座椅構(gòu)建完畢--
    --汽車發(fā)動(dòng)機(jī)構(gòu)建完畢--
    --汽車玻璃構(gòu)建完畢--
    --汽車輪子構(gòu)建完畢--
    --整個(gè)汽車構(gòu)建完畢--

       5)體會心得:Builder模式實(shí)際的重點(diǎn)就把汽車的組裝過程和零部件的生產(chǎn)分開來實(shí)現(xiàn),零部件的生成主要靠自己的對象來實(shí)現(xiàn),我上面只是在構(gòu)造函數(shù)里創(chuàng)建了,比較簡單,而重點(diǎn)汽車的組裝則交給CarBuilder來實(shí)現(xiàn),最終由builder來先負(fù)責(zé)零部件的創(chuàng)建,最后返回出成品的汽車。

    posted on 2012-08-06 17:37 陳睿 閱讀(268) 評論(0)  編輯  收藏 所屬分類: 設(shè)計(jì)模式

    導(dǎo)航

    <2012年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    統(tǒng)計(jì)

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲综合色丁香婷婷六月图片| 四虎成人免费影院网址| 久久精品九九亚洲精品天堂 | 亚洲jizzjizz在线播放久| 麻豆成人久久精品二区三区免费| 中文亚洲AV片不卡在线观看| 国产高潮流白浆喷水免费A片 | 亚洲国产精品人人做人人爱| 老司机午夜在线视频免费| 亚洲成a人片在线观看日本麻豆| 成人午夜影视全部免费看| 亚洲综合另类小说色区| 黄网站免费在线观看| 91在线亚洲精品专区| 日本视频一区在线观看免费| 亚洲AV综合色区无码二区偷拍 | 一级特级女人18毛片免费视频| 亚洲午夜无码片在线观看影院猛| caoporn成人免费公开| 亚洲AV午夜成人片| 91网站免费观看| 亚洲av无码专区在线观看亚| 亚洲一区二区精品视频| 国产精品99精品久久免费| 亚洲啪啪免费视频| 免费看国产一级片| 中国国语毛片免费观看视频| 久久久久亚洲AV无码麻豆| 嫩草影院在线免费观看| 国产免费久久久久久无码| 亚洲色图.com| 免费一看一级毛片人| 99免费精品视频| 国产成人亚洲精品| 国产成人亚洲综合无码| 无码区日韩特区永久免费系列| 国产精品自拍亚洲| 久久亚洲精品无码AV红樱桃| 日本一道一区二区免费看| 免费黄网站在线观看| 久久水蜜桃亚洲AV无码精品|