日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

23种设计模式之建造者模式

發(fā)布時間:2024/8/23 asp.net 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式之建造者模式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

建造者模式的定義

建造者模式也叫生成器模式, 定義如下:

將一個復(fù)雜對象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示

類圖如下:

?

在建造者模式中, 四個角色如下:

  • Product 產(chǎn)品類: 通常是實(shí)現(xiàn)了模板方法模式, 也就是有模板方法和基本方法
  • Builder 抽象建造者: 規(guī)范產(chǎn)品的組建, 一般是由子類實(shí)現(xiàn)
  • ConcreteBuilder 具體建造者: 實(shí)現(xiàn)抽象類定義的所有方法,并且返回一個組建好的對象.
  • Director 導(dǎo)演類: 負(fù)責(zé)安排已有模塊的順序, 然后告訴Builder開始建造.
  • 先看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)如下:

  • 封裝性. 使用建造者模式可以是客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié)
  • 建造者獨(dú)立, 容易擴(kuò)展
  • 便于控制細(xì)節(jié)風(fēng)險. 由于具體的建造者是獨(dú)立的, 因此可以對建造過程逐步細(xì)化, 而不對其他的模塊產(chǎn)生任何影響
  • 建造者模式的使用場景:

  • 相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時,可以采用建造者模式
  • 多個部件或零件,都可以裝配到一個對象中,但是產(chǎn)生的運(yùn)行結(jié)果又不相同時,則可以使用
  • 產(chǎn)品非常復(fù)雜,或者產(chǎn)品類中的調(diào)用順序不同產(chǎn)生了不同的效能,這個時候使用建造者模式非常合適
  • 在對象創(chuàng)建過程中也會使用到系統(tǒng)中的一些其他對象,這些對象在產(chǎn)品對象的創(chuàng)建過程中不易得到時,也可以采用建造者模式封裝該對象的創(chuàng)建過程.這種場景只能是一個補(bǔ)償方法, 因?yàn)橐粋€對象不容易獲得, 而在設(shè)計 階段竟然沒有發(fā)覺, 而要通過建造者模式柔化創(chuàng)建過程,本身已經(jīng)違反設(shè)計的最初目標(biāo)
  • 建造者模式關(guān)注的是零件類型和裝配工藝(順序), 這是它與工廠方法模式最大不同的地方, 雖然同為創(chuàng)建類模式, 但是注重點(diǎn)不同


    建造者模式最主要的功能是基本方法的調(diào)用順序安排,而工廠方法則重點(diǎn)是創(chuàng)建

    總結(jié)

    以上是生活随笔為你收集整理的23种设计模式之建造者模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。