建造者模式赴背,屬于創(chuàng)建型模式
? ? ? ? 首先翘狱,我們在這里舉個例子,大家應(yīng)該都玩過網(wǎng)絡(luò)游戲,進入游戲時候脊框,我們要選擇自己喜歡的角色集索,職業(yè)局嘁,性別孟害,精細一點的游戲我們要選擇各種個性化,如鼻子大小,身高择葡,膚色紧武,眼睛顏色等等。
? ? ? ? 我們用設(shè)計模式的話刁岸,怎么才能實現(xiàn)創(chuàng)建不同職業(yè)和個性化的功能呢脏里。有的人說可以用工廠模式,工廠模式當然可以實現(xiàn)虹曙,工廠模式可以把所有 (職業(yè) + 人物個性化) 的對象都創(chuàng)建一遍,那將是乘積的運算番舆,10個職業(yè)*10個眼睛顏色*10個頭發(fā)顏色等等酝碳, 那將要提前創(chuàng)建個多少對象,不敢想象恨狈,代碼幾乎沒有得到復用疏哗。
UML圖:
?在這里我們完全可以用建造者模式來簡單的解決這個問題。如果說工廠模式創(chuàng)建的是對象禾怠,那么建造者模是創(chuàng)建細節(jié)對象返奉。話不多說直接上代碼:
游戲人物:
建造者:
具體人物(法師和戰(zhàn)士):
指揮官:
測試類:
到這里,我們就用了2個類(ZhanshiBuilder吗氏,F(xiàn)ashiBuilder)芽偏,就能創(chuàng)建所有的個性化戰(zhàn)士和法師,相對于工廠模式弦讽,我們代碼更加的簡潔污尉,增加了代碼的復用,減少了代碼的耦合往产,問題得到了很好的解決被碗。
總結(jié):建造者模式是創(chuàng)建型模式中比較常見的一種,如果說工廠模式關(guān)注的是整體對象的創(chuàng)建仿村,而建造者模式是更加關(guān)注對象細節(jié)的創(chuàng)建锐朴。在jdk源碼中這些類使用了建造者模式:
java.lang.StringBuilder#append() (非線程安全)
java.lang.StringBuffer#append() (線程安全)
java.nio.ByteBuffer#put()(還CharBuffer,ShortBuffer蔼囊,IntBuffer焚志,LongBuffer
FloatBuffer和DoubleBuffer)
javax.swing.GroupLayout.Group#addComponent()
所有的實現(xiàn) java.lang.Appendable