成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

設(shè)計(jì)模式之建造者設(shè)計(jì)模式

wangxinarhat / 2062人閱讀

摘要:本質(zhì)建造者設(shè)計(jì)模式分離了對(duì)象子組件的構(gòu)造過(guò)程和組裝過(guò)程,實(shí)現(xiàn)了構(gòu)建與組裝的解耦,不同的構(gòu)建器相同的組裝順序以及相同的構(gòu)建器不同的組裝順序都可以創(chuàng)建出不同的對(duì)象,使得構(gòu)建與組裝充分解耦,進(jìn)而實(shí)現(xiàn)構(gòu)建算法與組裝算法的解耦,從而實(shí)現(xiàn)更好的復(fù)用。

這是設(shè)計(jì)模式系列的第二篇——建造者設(shè)計(jì)模式,我希望推送的文章是一個(gè)系列的,盡量保持一樣的寫(xiě)作風(fēng)格,盡量把我理解的闡述清楚,關(guān)于建造者設(shè)計(jì)模式主要從以下幾個(gè)方面來(lái)學(xué)習(xí),具體如下:

概述

本質(zhì)

關(guān)鍵概念

具體實(shí)現(xiàn)

總結(jié)

概述

建造者設(shè)計(jì)模式(Builder Pattern)屬于創(chuàng)建型設(shè)計(jì)模式,主要用于創(chuàng)建復(fù)雜的對(duì)象,可將復(fù)雜對(duì)象的構(gòu)建過(guò)程抽象出來(lái),通過(guò)不同實(shí)現(xiàn)的構(gòu)建者和裝配者最終組裝出不同的對(duì)象,可以非常方便的增加不同實(shí)現(xiàn)的構(gòu)建者、組裝者而不用修改以前的代碼。

本質(zhì)

建造者設(shè)計(jì)模式(Builder Pattern)分離了對(duì)象子組件的構(gòu)造過(guò)程和組裝過(guò)程,實(shí)現(xiàn)了構(gòu)建與組裝的解耦,不同的構(gòu)建器相同的組裝順序以及相同的構(gòu)建器不同的組裝順序都可以創(chuàng)建出不同的對(duì)象,使得構(gòu)建與組裝充分解耦,進(jìn)而實(shí)現(xiàn)構(gòu)建算法與組裝算法的解耦,從而實(shí)現(xiàn)更好的復(fù)用。

關(guān)鍵概念

構(gòu)建者(Builder):構(gòu)建不同的子組件且返回子組件或者提供獲取復(fù)雜對(duì)象的方法,將構(gòu)建過(guò)程抽象成接口或抽象類,方便擴(kuò)展具體的不同的構(gòu)建者。

組裝者(Dirctor):通過(guò)某個(gè)具體的構(gòu)建者構(gòu)建相關(guān)的子組件,同時(shí)對(duì)外提供組成復(fù)雜產(chǎn)品對(duì)象的方法。

當(dāng)需要生成復(fù)雜對(duì)象時(shí),直接通過(guò)某個(gè)具體的組裝者獲得想要的具體對(duì)象即可,至于組裝過(guò)程與構(gòu)建過(guò)程使用者不需要關(guān)心,分別由具體的組裝者與具體的構(gòu)建者內(nèi)部完成。當(dāng)然復(fù)雜對(duì)象可以理解為具有很多屬性的對(duì)象。

具體實(shí)現(xiàn)

下面以手機(jī)的組裝過(guò)程來(lái)說(shuō)明建造者設(shè)計(jì)模式的具體實(shí)現(xiàn),產(chǎn)品類如下:

/**
 * 產(chǎn)品
 * @author jzman
 */
public class Phone {
    private Screen screen;
    private Camera camera;
    private Cpu cpu;
    //省略getter、setter、toString 方法
    //...
}

//子組件
class Screen{
    private String name;
    //...
}
//子組件
class Camera{
    private String name;
    //...
}
//子組件
class Cpu{
    private String name;
    //...
}

抽象的構(gòu)建者:

/**
 * 構(gòu)建者
 * @author jzman
 */
public interface PhoneBuilder {
    Screen builderScreen();
    Camera builderCamera();
    Cpu builderCpu();
}

具體的構(gòu)建者:

/**
 * 具體的構(gòu)建者
 * @author jzman
 */
public class MiPhoneBuilder implements PhoneBuilder{

    @Override
    public Screen builderScreen() {
        System.out.println("構(gòu)建屏幕...");
        return new Screen("Mi-screen");
    }

    @Override
    public Camera builderCamera() {
        System.out.println("構(gòu)建相機(jī)...");
        return new Camera("Mi-camera");
    }

    @Override
    public Cpu builderCpu() {
        System.out.println("構(gòu)建屏幕...");
        return new Cpu("Mi-cpu");
    }
}

抽象的組裝者:

/**
 * 抽象的組裝者
 * @author jzman
 */
public interface PhoneDirector {
    Phone directPhone();
}

具體的構(gòu)建者:

/**
 * 具體的組裝者
 * @author jzman
 */
public class MiPhoneDirector implements PhoneDirector{
    private PhoneBuilder builder;
    
    public MiPhoneDirector(PhoneBuilder builder) {
        this.builder = builder;
    }

    @Override
    public Phone directPhone() {
        Phone phone = new Phone();
        phone.setScreen(builder.builderScreen());
        phone.setCamera(builder.builderCamera());
        phone.setCpu(builder.builderCpu());
        return phone;
    }
}

使用者直接通過(guò)某個(gè)具體的組裝者獲取最終的產(chǎn)品,具體如下:

public class Client {
    public static void main(String[] args) {
        PhoneBuilder builder = new MiPhoneBuilder();
        MiPhoneDirector director = new MiPhoneDirector(builder);
        Phone phone = director.directPhone();
        System.out.println(phone);
    }
}

執(zhí)行結(jié)果如下:

構(gòu)建屏幕...
構(gòu)建相機(jī)...
構(gòu)建屏幕...
Phone [screen=Screen [name=Mi-screen], camera=Camera [name=Mi-camera], cpu=Cpu [name=Mi-cpu]]

最終,使用者通過(guò)具體的組裝者 MiPhoneDirector 組裝出一個(gè)具有明顯組裝特征的手機(jī),即一個(gè)屏幕是 Mi-screen 、相機(jī)是 Mi-camera、CPU 是 Mi-cpu 的手機(jī)。

總結(jié)

建造者設(shè)計(jì)模式(Builder Pattern) 一般用于具有共同特性的復(fù)雜對(duì)象,其對(duì)象本身與構(gòu)建、組裝過(guò)程分離,可做到復(fù)雜對(duì)象屬性的可配置,當(dāng)然,如果復(fù)雜對(duì)象內(nèi)部過(guò)于復(fù)雜,勢(shì)必會(huì)需要?jiǎng)?chuàng)建更多的構(gòu)建者類,使得構(gòu)建過(guò)程繁瑣,我覺(jué)得開(kāi)發(fā)中使用建造者設(shè)計(jì)模式主要用來(lái)做一些封裝,使得代碼寫(xiě)起來(lái)更靈活,如 Picasso、Glide 的 API 就有建造者設(shè)計(jì)模式的使用,使得復(fù)雜對(duì)象的一些屬性可以做到可配置,非常方便。

可以選擇關(guān)注微信公眾號(hào):jzman-blog 獲取最新更新,一起交流學(xué)習(xí)!

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/74730.html

相關(guān)文章

  • 一天一個(gè)設(shè)計(jì)模式JS實(shí)現(xiàn)——建造模式

    摘要:參考文章設(shè)計(jì)模式之建造者模式一什么是建造者模式建造者模式是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 參考文章:java設(shè)計(jì)模式之建造者模式 一、什么是建造者模式建造者模式:是將一個(gè)復(fù)雜的對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。工廠類模式提供的是創(chuàng)建單個(gè)類的模式,而建造者模式則是將各種產(chǎn)品集中起來(lái)進(jìn)行管理,用來(lái)創(chuàng)建復(fù)合對(duì)象,所謂...

    boredream 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式(三)——建造模式

    摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類創(chuàng)建具體建造者類。建造者模式使用場(chǎng)景建造者模式使用場(chǎng)景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時(shí),可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...

    Forelax 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)#Java設(shè)計(jì)模式(三)——建造模式

    1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 說(shuō)人話:將構(gòu)...

    番茄西紅柿 評(píng)論0 收藏2637
  • 設(shè)計(jì)模式建造模式

    摘要:建造者實(shí)現(xiàn)抽象類的所有未實(shí)現(xiàn)的方法,具體來(lái)說(shuō)一般是兩項(xiàng)任務(wù)組建產(chǎn)品返回組建好的產(chǎn)品。 0x01.定義與類型 定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 用戶只需指定需要建造的類型就可以得到他們,建造過(guò)程及細(xì)節(jié)不需要知道 類型:創(chuàng)建型 實(shí)現(xiàn)建造模式的兩種方式 1.抽象建造者 UML: showImg(https://segmentfault.co...

    banana_pi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<