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

          一:使用場景

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

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

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

          二:一個實際的例子

          汽車的組裝

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

          public class Car implements Serializable{

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

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

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

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

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

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

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

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

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

          /**組裝汽車發(fā)動機*/
          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());
          }

          /**組裝汽車發(fā)動機*/
          @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)最后汽車創(chuàng)建測試

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

             最后輸出:

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

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

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

          導航

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

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 盘锦市| 于都县| 金秀| 天台县| 临江市| 镇远县| 溧水县| 德保县| 务川| 巩义市| 博乐市| 宁城县| 宣城市| 始兴县| 云阳县| 黄平县| 阿坝县| 张家口市| 横峰县| 龙泉市| 东丰县| 东乌珠穆沁旗| 额敏县| 深水埗区| 高雄县| 东莞市| 贵港市| 鞍山市| 天水市| 高州市| 霍邱县| 青铜峡市| 高青县| 巴马| 漳州市| 叙永县| 阿尔山市| 益阳市| 修文县| 东辽县| 衢州市|