創建模式-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 陳睿 閱讀(264) 評論(0)  編輯  收藏 所屬分類: 設計模式

          導航

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

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 芦溪县| 北碚区| 河间市| 大埔县| 岳阳市| 开鲁县| 甘孜县| 中西区| 德庆县| 收藏| 昭平县| 澳门| 日照市| 荔浦县| 漯河市| 德江县| 新疆| 建始县| 城步| 健康| 曲周县| 广河县| 峨眉山市| 息烽县| 咸宁市| 神农架林区| 八宿县| 襄城县| 康保县| 合阳县| 永福县| 屯门区| 上栗县| 敦煌市| 瑞金市| 平塘县| 合水县| 舟曲县| 娱乐| 襄垣县| 苏州市|