PS:今天的23中設計模式中的創建者方式,至此告一段落。我今天帶來的技術分享為創建者模式以及原型模式。當然在Java中這兩種方式很常見,只不過我們寫的次數確實有點低而已,但是這不是我不學它的借口!!!
創建者模式
無構建者模式代碼示例:需求創建一個摩托車對象 并且使其開始運行。
發動機代碼構建:
發動機代碼構鍵
車架代碼實例:
車架代碼實例
輪胎機代碼示例:
輪胎機代碼示
摩托車對象實體類:
摩托車對象實體類
測試類:
測試類
總結:摩托車對象時一個大對象:構建過程中可能需要很多其他對象的使用,比如:車架、發動機、輪胎 所以如果每次摩托車對象的創建,都需要其他對象 并且調用者都需要知道摩托車的具體細節,這樣對于調 用者來說是很痛苦的。所以在這個基礎之上,我們希望 是否可以將調用者和創建者進行解耦。
作用:
當一個類的內部數據過于復雜的時候(通常是負責持有數據的類,比如Config、VO、PO、Entity...),要創建的話可能就需要了解這個類的內部結構,還有這些東西是怎么組織裝配等一大坨亂七八糟的東西,這個時候就會增加學習成本而且會很混亂,這個時候就想啊想一種什么法子來管理一下這個類中的數據呢,怎么在創建的時候讓它按部就班的來,并且代碼可讀性很好別讓我看花了眼啊,我要的東西也能都很好設置進來,這就是Builder模式的應用場景,Builder模式可以將一個類的構建和表示進行分離。
常見的使用場景:構建比較復雜的產品。
StringBuilder DomBuilder SaxBuilder
Sql中的PreparedStatement
構建者類圖總結
類圖總結
總結:以上,調用者無需知道具體的構建者中的具體構建順序,調用者專注于自己的業務即可。實現了解耦。但是這里最重要的就是構建順序,不同的builder’可以構建不同的實例對象
案例測試:需求構建一個對應品牌的手機對象。調用者無需知道具體的對象的調用細則。
手機實體類構建代碼:
實體手機類
構建者接口以及對應實現 :
構建者接口以及對應實現
裝配接口以及對應實現:
裝配接口以及對應實現
測試類:
測試類
總結:以及需工廠的區別
a、將一個對象底層的依賴 全部交由builder執行,具體的建造順序,由builder指定。然后由director負責完成裝配過程。調用者無需知道底層的具體順序以及裝配過程。如果不滿足需要則直接重新創建builder,完成具體的建造順序
b、建造者模式關注與對象創建的具體過程,而工廠則關注于最后創建對象的結果。
c、如果構建出來的對象差異較大,需要多個構建者才能完成。所以會借助到單例或者工廠一起使用。
拓展:
需求,構建類似于一個對象,但是對象構建時,屬性很多。有可能忘記屬性,或者屬性沒寫全。那么當前這個對象就無法創建,通過創建者模式解決問題。
實現代碼:
實現代碼
測試類:
測試類
PS:大家有什么想要分享的內容!可以在評論下方留言!!!
更多行業資訊請關注:百戰程序員,喜歡請分享轉發