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