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

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

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

    創建模式-Builder模式

    一:使用場景

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

        2)采用Builder模式后的好處:把一個負責的對象的創建過程分解,把一個對象的創建分成兩個對象來負責創建,代碼更有利于維護,可擴性比較好。

       3)采用Builder模式后的壞處:實現起來,對應的接口以及部件的對象的創建比較多,代碼相對來講,比較多了,估計剛開始你會有點暈,這個可以考慮代碼精簡的問題,增加代碼的可讀性。  

    二:一個實際的例子

    汽車的組裝

      1)首先創建汽車這個成品對象,包含什么的成員

    public class Car implements Serializable{

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

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

    /**汽車發動機*/
    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)創建對應汽車零部件

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

    public class Engine {
    public Engine(){
       print("--汽車發動機構建完畢--");
    }
    }

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

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

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

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

    /**組裝汽車發動機*/
    public void buildEngine();

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

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

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

    以及實現類

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

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

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

    /**組裝汽車發動機*/
    @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("--整個汽車構建完畢--");
       return car;
    }

    }

    4)最后汽車創建測試

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

       最后輸出:

    --汽車座椅構建完畢--
    --汽車發動機構建完畢--
    --汽車玻璃構建完畢--
    --汽車輪子構建完畢--
    --整個汽車構建完畢--

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

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

    導航

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

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久久亚洲综合色一区二区三区| 国产成人高清精品免费鸭子 | 四虎国产精品永久免费网址 | 亚洲综合自拍成人| 国产免费无码一区二区| 亚洲欧洲∨国产一区二区三区| 成年女人A毛片免费视频| 亚洲人成图片小说网站| 在线观看片免费人成视频播放| 亚洲综合日韩久久成人AV| 国产精品免费一区二区三区| 亚洲综合av永久无码精品一区二区 | 免费看一级做a爰片久久| 性色av极品无码专区亚洲| 国产小视频在线免费| 特级一级毛片免费看| 亚洲性猛交XXXX| 91免费国产精品| 国产成+人+综合+亚洲专| 午夜网站免费版在线观看| 免费精品视频在线| 亚洲人成人一区二区三区| 最近2019年免费中文字幕高清| 亚洲二区在线视频| 国产免费拔擦拔擦8x| 最新亚洲成av人免费看| 亚洲欧洲国产综合| 国产成人免费a在线视频色戒| 国产成人无码免费看片软件| 亚洲AV区无码字幕中文色| 日韩欧美一区二区三区免费观看| 亚洲国产成人无码AV在线影院| 亚洲一级片内射网站在线观看| 伊人久久免费视频| 香蕉视频亚洲一级| 亚洲Av无码精品色午夜| 成人免费视频试看120秒| a毛片免费观看完整| 亚洲精品天堂在线观看| 久久久亚洲精品蜜桃臀| 亚洲三级在线免费观看|