Builder模式的理解
Builder模式是一步一步創建一個復雜的對象,它允許用戶可以只通過指定復雜對象的類型和內容就可以構建它們。用戶不需要知道內部的具體構建細節。因為一個復雜的對象,不但有很多大量組成部分,如汽車,有很多部件:車輪、方向盤、發動機還有各種小零件等等,部件很多,但遠不止這些,如何將這些部件裝配成一輛汽車呢?這個裝配過程也很復雜(需要很好的組裝技術),Builder模式就是為了將部件和組裝過程分開。是為了將構建復雜對象的過程和它的部件解耦。注意::是解耦過程和部件。就拿造房子來說,比如某一天你的領導找到了你,“小A啊,工作不錯,你的能力和態度都是我比較欣賞的,好好干前途一片大好”,然后你摸摸腦袋,呵呵傻笑,“我最近想蓋一棟別墅,你幫我搞定吧,有你在,我放心”,然后你屁顛屁顛跑去找了N個各個領域的師傅,砌墻的、安裝電線的、裝地板的、修馬桶的亂78遭一堆人,好了,現在可以動工了吧。但你手下的那些師傅卻是你瞧我,我瞧你的,“老板,怎么應該做成什么樣的別墅,先從哪搞起?”這時侯,你也傻了吧,忽略了最重要的一環-設計,沒辦法鍋自己也不會,去找個設計師設計兼指揮吧。設計師列出了N個方案,并選擇了其中之一就動工了。一個月后,你的上司找你要了房子交付后,這個過程也就完結了。builder模式就是這么個過程,把你的裝配過程(設計師指揮各個師傅裝配房子的順序過程)和這個builder(帶領各個專職師傅所作的事情)也就是部件職責分離。光說不練,沒用,那接下來咱就貼下代碼更加形象化下,如下:
UML類圖:

UML順序圖粗略如下:

首先假設一個復雜對象是由多個部件組成的,Builder模式是把復雜對象的創建和部件的創建分別開來,分別用Builder類和Director類來表示。
















用Director構建最后的復雜對象,而在上面Builder接口中封裝的是如何創建一個個部件(復雜對象是由這些部件組成的),也就是說Director的內容是如何將部件最后組裝成成品:















Builder的具體實現ConcreteBuilder,通過具體完成接口Builder來構建或裝配產品的部件,定義并明確它所要創建的是什么具體東西;提供一個可以重新獲取產品的接口。




















復雜對象:產品Product

復雜對象的部件:部件Part

接下去就是我們的老板來找我們要房子了:






整個builder模式就這樣完結了,當然有人會有疑問“為什么getResult不放在Director里?”至于這個問題我是這么想的,你的老板當然是找你要房子了,難不成還找設計師要?我們是builder嘛,那些部件(Part)可都是我們管理的,而設計師只負責設計組裝,這樣過程和部件不是職責分離的很清楚嗎?如果哪一天,老板又想造另外一棟格式不一樣的別墅,我們就直接找設計師解決下。至于builder模式和abstract factory模式的差異,我是這么理解的,builder模式注重于一個過程,而abstract factory則側重于產品的管理。
posted on 2010-03-15 02:00 永遠的火焰舞者 閱讀(302) 評論(0) 編輯 收藏 所屬分類: designing pattern