23种设计模式之建造者模式
建造者模式的定義
建造者模式也叫生成器模式, 定義如下:
將一個復(fù)雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示
類圖如下:
?
在建造者模式中, 四個角色如下:
先看Product類的代碼, 通常他是一個組合或繼承產(chǎn)生的類:
?
抽象建造者代碼如下:
?
其中 setPart 方法是零件的配置, 其他的對象, 獲得一個不同零件,或者不同的裝配順序就可能產(chǎn)生不同的產(chǎn)品
具體建造者代碼如下:
?
導(dǎo)演類代碼:
?
導(dǎo)演類起到封裝的作用,避免高層模塊深入到建造者內(nèi)部的實(shí)現(xiàn)類. 當(dāng)然, 在建造者模式比較龐大時, 導(dǎo)演類可以有多個
建造者模式分析
現(xiàn)在又一個項目,創(chuàng)建不同的汽車, 有奔馳的寶馬的, 車有啟動、停止、喇叭聲音、引擎聲音, 不同車有不同的順序, 開始創(chuàng)建, 先使用模板方法模式, 類圖如下
?
在CarModel中定義了一個 setSequence 方法, 車輛模型的這幾個動作要如何排布, 是在 ArrayList中定義的. 然后run方法根據(jù) sequence定義的順序完成指定的順序動作
CarModel代碼:
?
CarModel是這樣設(shè)計的, setSequence方法允許客戶自己設(shè)置一個順序, 是先啟動還是先按喇叭, 在子類中實(shí)現(xiàn)其基本方法, 然后同過run方法實(shí)現(xiàn)順序調(diào)用
其實(shí)現(xiàn)類代碼就不再占用篇幅
這時有一個要求, 生產(chǎn)一個奔馳模型,要先發(fā)動引擎,再啟動,然后停下來,不需要按喇叭, 創(chuàng)建代碼如下:
?
這樣我們就創(chuàng)建了一輛汽車, 但是需求是汽車的執(zhí)行順序要能夠隨意調(diào)整, 我們只滿足了一個, 還有下一個,下下個, 那怎么辦? 我們每次都要寫這些來滿足. 我們要想辦法解決這個問題, 那么我們可以通過建造者, 通過建造者創(chuàng)建, 類圖如下
?
其 CarBuilder 代碼如下:
?
實(shí)現(xiàn)類代碼如下
?
這樣,我們就可以通過一個導(dǎo)演類,封裝各個順序并返回產(chǎn)品
?
其中的方法可以添加,可以有很多方法
這樣,再創(chuàng)建的時候就輕松多了,直接調(diào)用一個方法即可
這不是一個單純的建造者模式, 其中使用了模板方法模式
建造者模式的應(yīng)用
優(yōu)點(diǎn)如下:
建造者模式的使用場景:
建造者模式關(guān)注的是零件類型和裝配工藝(順序), 這是它與工廠方法模式最大不同的地方, 雖然同為創(chuàng)建類模式, 但是注重點(diǎn)不同
建造者模式最主要的功能是基本方法的調(diào)用順序安排,而工廠方法則重點(diǎn)是創(chuàng)建
總結(jié)
以上是生活随笔為你收集整理的23种设计模式之建造者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux apache 大文件,Apa
- 下一篇: 23种设计模式之策略模式