標籤:java 設計模式 建立者
PS:今天的23中設計模式中的建立者方式,至此告一段落。我今天帶來的技術分享為建立者模式以及原型模式。當然在Java中這兩種方式很常見,只不過我們寫的次數確實有點低而已,但是這不是我不學它的借口!!!
建立者模式
無構建者模式程式碼範例:需求建立一個>機車對象 並且使其開始運行。
發動機代碼構建:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b000004a9b8da9662c3" />
發動機代碼構鍵
車架代碼執行個體:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b02000333d6ae3bad90" />
車架代碼執行個體
輪胎機程式碼範例:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b060000234613f2ec87" />
輪胎機代碼示
>機車對象實體類:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b0100033ce65ca32659" />
>機車對象實體類
測試類別:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b0100033f5c2904488d" />
測試類別
總結:>機車對象時一個大對象:構建過程中可能需要很多其他對象的使用,比如:車架、發動機、輪胎 所以如果每次>機車對象的建立,都需要其他對象 並且調用者都需要知道>機車的具體細節,這樣對於調 用者來說是很痛苦的。所以在這個基礎之上,我們希望 是否可以將調用者和建立者進行解耦。
作用:
當一個類的內部資料過於複雜的時候(通常是負責持有資料的類,比如Config、VO、PO、Entity...),要建立的話可能就需要瞭解這個類的內部結構,還有這些東西是怎麼組織裝配等一大坨亂七八糟的東西,這個時候就會增加學習成本而且會很混亂,這個時候就想啊想一種什麼法子來管理一下這個類中的資料呢,怎麼在建立的時候讓它按部就班的來,並且代碼可讀性很好別讓我看花了眼啊,我要的東西也能都很好設定進來,這就是Builder模式的應用情境,Builder模式可以將一個類的構建和表示進行分離。
常見的使用情境:構建比較複雜的產品。
StringBuilder DomBuilder SaxBuilder
Sql中的PreparedStatement
構建者類圖總結
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p1.pstatp.com/large/3b0400003384eb30f62c" />
類圖總結
總結:以上,調用者無需知道具體的構建者中的具體構建順序,調用者專註於自己的業務即可。實現瞭解耦。但是這裡最重要的就是構建順序,不同的builder’可以構建不同的執行個體對象
案例測試:需求構建一個對應品牌的手機對象。調用者無需知道具體的對象的調用細則。
手機實體類構建代碼:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b0600002a087f401451" />
實體手機類
構建者介面以及對應實現 :
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b0400005917e6f2c91c" />
構建者介面以及對應實現
裝配介面以及對應實現:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p1.pstatp.com/large/3b0700003392567a8cc4" />
裝配介面以及對應實現
測試類別:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p3.pstatp.com/large/3b0700003bd159e2a6d2" />
測試類別
總結:以及需工廠的區別
a、將一個對象底層的依賴 全部交由builder執行,具體的建造順序,由builder指定。然後由director負責完成裝配過程。調用者無需知道底層的具體順序以及裝配過程。如果不滿足需要則直接重新建立builder,完成具體的建造順序
b、建造者模式關注與對象建立的具體過程,而工廠則關注於最後建立對象的結果。
c、如果構建出來的對象差異較大,需要多個構建者才能完成。所以會藉助到單例或者工廠一起使用。
拓展:
需求,構建類似於一個對象,但是對象構建時,屬性很多。有可能忘記屬性,或者屬性沒寫全。那麼當前這個對象就無法建立,通過建立者模式解決問題。
實現代碼:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p9.pstatp.com/large/3b0500008c0e48df75f2" />
實現代碼
測試類別:
650) this.width=650;" style="margin:10px auto;" alt="Java設計模式之建立者模式分享熱愛編程,程式人生" src="http://p1.pstatp.com/large/3b050001d4cfded48f7d" />
測試類別
PS:大家有什麼想要分享的內容!可以在評論下方留言!!!
上海尚學堂-IT蛇精病原創。
上海尚學堂java培訓,項目實戰化教學,成就java培訓高端品牌!
本文出自 “13144428” 部落格,請務必保留此出處http://13154428.blog.51cto.com/13144428/1966899
Java設計模式之建立者模式,分享熱愛編程的程式人生