乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      設(shè)計模式-建造者模式

       行者花雕 2021-07-13

      角色


      建造者故名思想,就是建房子的人,是來自建筑工程領(lǐng)域的的概念,其中包含三種主要角色:

      • 建造者(Builder):不同種類的工人,如打地基的,建房梁的,室內(nèi)裝修的等;

      • 具體的建造者(ConcreteBuilder):每個工種對應(yīng)的具體的工人;

      • 指揮者(Director):工程隊總指揮,包工頭,指揮具體的建造者建房子;

      • 具體產(chǎn)品(Product):最終建成的房子。

      定義


      建造者模式是將一個復(fù)雜的對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。創(chuàng)建者模式隱藏了復(fù)雜對象的創(chuàng)建過程,它把復(fù)雜對象的創(chuàng)建過程加以抽象,通過子類繼承或者重載的方式,動態(tài)的創(chuàng)建復(fù)雜的、具有復(fù)合屬性的對象。

      案例


      下面將通過一個小案例來解釋說明什么建造者模式。

      簡化需求

      假設(shè)需要制造一個手機(jī),手機(jī)包括CPU,內(nèi)存,屏幕等幾個部分,而CPU,內(nèi)存,屏幕配置不同又有高端,低端之分。要求手機(jī)配置可以靈活搭配。

      初始版UML

      該版本直接在在需要的時候通過new創(chuàng)建不同規(guī)格的CPU,內(nèi)存,屏幕等對象。

      優(yōu)點

      簡單,并且配置可靈活搭配

      缺點

      • 面向了實現(xiàn)編程,用戶需要知道太多的創(chuàng)建細(xì)節(jié)

      工廠方法改造

      基于上述原因,我們通過工廠方法改造,屏蔽具體配件的創(chuàng)建細(xì)節(jié)。

      優(yōu)點

      • 屏蔽了配件的創(chuàng)造細(xì)節(jié)

      • 配置可靈活搭配

      缺點

      • 復(fù)雜度急劇增大,類爆炸

      • 把配件的組裝交給手機(jī)類(Phone)處理不合理

      • 沒有屏蔽手機(jī)創(chuàng)造細(xì)節(jié)

      抽象工廠+簡單工廠改造

      為了解決類爆炸的問題,我們合并配件工廠類,由一個抽象工廠創(chuàng)建相關(guān)配件,再由簡單工廠組裝生產(chǎn)手機(jī)成品。

      簡化UML(標(biāo)準(zhǔn)版本)

      由于無論是CPU、內(nèi)存還是屏幕都屬于手機(jī)的一部分,因此整個產(chǎn)品還是手機(jī)本身,由此,可簡化上述UML圖,并抽象得到下圖:

      優(yōu)點

      • 一定程度上,消除了類爆炸問題

      • 職責(zé)分離,由單獨一個生產(chǎn)線組裝手機(jī)

      缺點

      • 配件配置變得固定了,不能隨意組合

      • 對大多數(shù)場景依然過于復(fù)雜,比如,未必每一個配置的手機(jī)都需要一個生產(chǎn)線,組裝手機(jī)也未必需要一個單獨的生產(chǎn)線。

      進(jìn)一步簡化

      很多場景中并沒有指揮者,或者說指揮者就是建造者本身,因此,建造者模式可進(jìn)一步簡化為如下結(jié)構(gòu):

      再進(jìn)一步改造

      同樣的,大多數(shù)情況一個建造者只會有一個實現(xiàn)子類,因此,還可用進(jìn)一步簡化,這樣可以使用委托對需要建造的對象進(jìn)行靈活的配置。

      簡化UML(簡化版本,最常用)

      優(yōu)點

      簡單,靈活,代碼優(yōu)雅

      缺點

      用戶使用成本相對較高,需要使用者自己配置內(nèi)部參數(shù)。

      總結(jié)


      建造者模式通常用于動態(tài)的創(chuàng)建復(fù)雜的、具有復(fù)合屬性的對象。在.Net Core也存在大量的建造者模式的使用,例如,StringBuilder、HostBuilder、IHostBuilder、IWebHostBuilder、ConfigurationBuilder等,有興趣的可以學(xué)習(xí)下。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多