posts - 297,  comments - 1618,  trackbacks - 0
          ???? 建造(Builder)模式屬于對象的創(chuàng)建模式
          1. 定義
          ????? 建造模式將一個產品的內部表象與產品生成過程分割出來,從而可以使一個建造過程生成具有不同的內部表象的產品對象。
          ?2. 使用的原因
          ???? 是為了將構建復雜對象的過程和它的部件解耦。
          ?3.?適用的情況
          ????? 建造模式利用一個導演者對象和具體建造者對象一個一個地建造出所有的零件,從而建造出完整的產品對象。建造者模式將產品的結構和產品的零件建造過程對客戶端隱藏起來,把對建造過程進行指揮的責任和具體建造零件和責任分割開來,達到責任劃分和封裝的目的。
          4. 類圖結構及其說明
          ???? 1)
          建造模式的類圖如下所示:
          ??????
          ????? 2)各類的說明如下:
          ?????????i)抽象建造者(Builder)角色:給出一個抽象接口,以規(guī)范產品對象的各個組成成分的構造;
          ???????? ii)具體建造者(ConcretBuilder)角色:它在應用程序的調用下創(chuàng)建產品的實例。完成任務為;
          ????????????? a)? 實現抽象建造者Builder接口,給出一步步完成創(chuàng)建產品實例的操作;
          ????????????? b)? 在創(chuàng)建完成后,提供產品的實例。
          ?????????iii) 導演者(Director角色):調用具體建造者角色以創(chuàng)建產品對象;
          ???????? iv)產品(Product)角色:建造中的復雜對象。一般情況下,一個系統(tǒng)不止一個產品類。
          5. 應用舉例
          ????????以下實例建造一所Amigo想要的一所房子,呵呵,初中時的夢想:)
          ??????? 一所小小的竹子做成的房子,滿屋掛滿風鈴,有一個茶幾,坐落在山上。
          ?????1) 需求分析
          ????????Amigo的這所房子的建造跟我們討論的建造模式很是相關哦,竹子、風鈴、茶幾相當于我們所說的“零件”??,最后建造成的房子相當于Amigo夢寐以求的竹房。呵呵,我們開始建造吧,完成Amigo的夢想!
          ???????? i)我們首先建立一個接口Builder,它定義如何創(chuàng)建我想要的房子的各個組成部分:
          ????????????
          public?interface?Builder?{
          ??
          //創(chuàng)建想要的竹子
          ??void?buildBamboo();

          ??
          //創(chuàng)建風鈴
          ??void?buildWindbell();
          ??
          ??
          //創(chuàng)建茶幾
          ??void?buildTeapoy();
          ?
          ??
          //返回最后建造好的房子
          ??
          //房子的組裝過程不在這里進行,而是轉移到Director中進行,從而實現了解耦過程和部件
          ??House?getHouse();
          }

          ??????? ii)Director類將竹子、風鈴、茶幾最后組裝成我的full house
          ????
          public?class?Director?{
          ????
          private?Builder?builder;
          ????
          ????
          public?Director(Builder?builder)?{
          ????
          this.builder?=?builder;
          ????}
          ?

          ????
          /**
          ??????*?該方法組裝我的full?house
          ??????
          */

          ????
          public?void?construct()?{
          ????builder.buildBamboo();
          ????????builder.buildWindbell();??
          ????????builder.buildTeapoy();??
          ????}

          }
          ????? iii)具體建造器,茶幾等怎么建造成的?我這樣的懶人是不會知道的了,到時候請人吧。
          ?
          public?class?ConcreteBuilder?implements?Builder?{
          ???
          public?void?buildBamboo()?{
          ???????
          //讓別人去做吧,我去數工錢了
          ????}


          ????
          public?void?buildWindbell()?{
          ???????
          //同上
          ?????}


          ????
          public?void?buildTeapoy()?{
          ???????
          //同上
          ?????}


          ?????
          public?House?getHouse()?{
          ?????}

          }

          ??????
          ?????? iv)House類
          ????????????
          public?class?House?{
          }

          ?????? v) 下面來看看如何使用Builder模式來創(chuàng)建我的竹房,呵呵。
          ??????????
          ConcreteBuilder?builder?=?new?ConcreteBuilder();
          Director?director?
          =?new?Director(builder);
          director.construct();
          House?house?
          =?builder.getHouse();

          ???????:),建得差不多吧,還差點什么呢,以后慢慢想咯。
          參考書籍:《Java與模式》
          ??????????????????? 《Patterns in Java》

          ?

          posted on 2007-03-18 23:27 阿蜜果 閱讀(4598) 評論(9)  編輯  收藏 所屬分類: Design Pattern


          FeedBack:
          # re: 設計模式學習筆記--建造模式(Builder)
          2007-03-19 09:10 | Tortoise
          支持!你好用功呀!~  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder)
          2007-03-19 11:54 | Tortoise
          好經典呀。就是不知道干嗎要這樣設計  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder)
          2007-03-20 10:46 | zhyiwww
          講的簡單易懂。基本上明白了,還需要人深入的學習和實踐。  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder) [未登錄]
          2007-03-20 13:21 | 阿蜜果
          呵呵,努力學習設計模式中,up下篇,template模式  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder)
          2008-01-08 12:29 | hbyufan@hotmail.com
          一所小小的竹子做成的房子,滿屋掛滿風鈴,有一個茶幾,坐落在山上。  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder) [未登錄]
          2009-02-10 14:28 | bean
          ConcreteBuilder builder = new ConcreteBuilder();
          最好用接口聲明  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder)
          2009-12-21 15:44 | xiaoyang818
          ConcreteBuilder builder = new ConcreteBuilder();

          最好改成

          Builder builder = new ConcreteBuilder();
            回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder)
          2011-03-17 11:20 | fxbird
          都是些人云亦云的家伙,請問博主,你能說出建造模式和構造函數有什么區(qū)別嗎?建造的時候難道不需要參數嗎,哪有不需要參數就能構造出的東西。  回復  更多評論
            
          # re: 設計模式學習筆記--建造模式(Builder) [未登錄]
          2012-09-24 12:06 | C
          @xiaoyang818
          +1  回復  更多評論
            
          <2007年3月>
          25262728123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

                生活將我們磨圓,是為了讓我們滾得更遠——“圓”來如此。
                我的作品:
                玩轉Axure RP  (2015年12月出版)
                

                Power Designer系統(tǒng)分析與建模實戰(zhàn)  (2015年7月出版)
                
               Struts2+Hibernate3+Spring2   (2010年5月出版)
               

          留言簿(263)

          隨筆分類

          隨筆檔案

          文章分類

          相冊

          關注blog

          積分與排名

          • 積分 - 2296322
          • 排名 - 3

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 措勤县| 海晏县| 敦化市| 玛纳斯县| 南平市| 永靖县| 元阳县| 无为县| 麻栗坡县| 卓资县| 泸溪县| 金坛市| 长乐市| 咸宁市| 潜江市| 中方县| 汶川县| 长岛县| 缙云县| 伊宁县| 河北省| 新和县| 汕头市| 嵊泗县| 甘德县| 桂平市| 运城市| 会泽县| 丹江口市| 宁城县| 大渡口区| 五寨县| 鸡西市| 灵山县| 南丰县| 临沧市| 宽城| 桦甸市| 丽水市| 嵊州市| 昆山市|