国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

《源碼中的設(shè)計(jì)模式》之建造者模式——鏈?zhǔn)秸{(diào)用

wind3110991 / 2573人閱讀

摘要:上期原型模式發(fā)布以后,收到了粉絲的感謝,一條創(chuàng)作的動(dòng)力更足了。今天我們一塊看一下建造者模式,同樣是創(chuàng)建型設(shè)計(jì)模式。為我們提供了建造者模式的快速實(shí)現(xiàn),要應(yīng)用到實(shí)際編碼中。

?本文收錄于專欄《源碼中的設(shè)計(jì)模式》——理論與實(shí)戰(zhàn)的完美結(jié)合

作者其它優(yōu)質(zhì)專欄推薦:

?《技術(shù)專家修煉》——搞技術(shù),進(jìn)大廠,聊人生三合一專欄

?《leetcode 300題》——每天一道算法題,進(jìn)大廠必備

?《糊涂算法》——從今天起,邁過數(shù)據(jù)結(jié)構(gòu)和算法這道坎

?《從實(shí)戰(zhàn)學(xué)python》——Python的爬蟲,自動(dòng)化,AI等實(shí)戰(zhàn)應(yīng)用(代碼開源)

點(diǎn)擊跳轉(zhuǎn)到文末領(lǐng)取粉絲福利


哈嘍,大家好,我是一條~

之前的《白話設(shè)計(jì)模式》因?yàn)楣ぷ鞅粩R置,如今再次啟航,并搭配框架源碼解析一起食用,將理論與實(shí)戰(zhàn)完美結(jié)合。

對(duì)設(shè)計(jì)模式不是很熟悉的同學(xué)可以先看一下《23種設(shè)計(jì)模式的一句話通俗解讀》全面的了解一下設(shè)計(jì)模式,形成一個(gè)整體的框架,再逐個(gè)擊破。

上期原型模式發(fā)布以后,收到了粉絲的感謝,一條創(chuàng)作的動(dòng)力更足了。

今天我們一塊看一下建造者模式,同樣是創(chuàng)建型設(shè)計(jì)模式。

定義

官方定義

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

通俗解讀

提供一種創(chuàng)建對(duì)象的方式,創(chuàng)建的東西細(xì)節(jié)復(fù)雜,還必須暴露給使用者。屏蔽過程而不屏蔽細(xì)節(jié)

類似建房子,只需要把材料和設(shè)計(jì)圖紙給工人,就能建成想要的房子,不關(guān)注工人建房子的過程,但對(duì)于細(xì)節(jié),我們又可以自己設(shè)計(jì)。

結(jié)構(gòu)圖

代碼演示

本文源碼:建造者模式 提取碼: vpqt

目錄結(jié)構(gòu)

建議跟著一條學(xué)設(shè)計(jì)模式的小伙伴都建一個(gè)maven工程,并安裝lombok依賴和插件。

并建立如下包目錄,便于歸納整理。

pom如下

    <dependency>        <groupId>org.projectlombokgroupId>        <artifactId>lombokartifactId>        <version>1.16.10version>    dependency>

開發(fā)場(chǎng)景

現(xiàn)在有一個(gè)手機(jī)的建造者,我要讓它為我生產(chǎn)不用品牌和配置的手機(jī)。該怎么實(shí)現(xiàn)?

代碼演示

1.創(chuàng)建手機(jī)類

@Datapublic class Phone {               //處理器        protected String cpu;        //內(nèi)存        protected String mem;        //磁盤        protected String disk;        //屏幕大小        protected String size;}

2.創(chuàng)建建造者接口

//定義建造者的模板方法public interface Builder {    Phone phone = new Phone();    void buildCpu(String cpu);    void buildMem(String mem);    void buildDisk(String disk);    void buildSize(String size);    default Phone getPhone(){        return phone;    }}

3.創(chuàng)建Vivo手機(jī)的建造者

public class VivoPhoneBuilder implements Builder{		//建造者細(xì)節(jié)的實(shí)現(xiàn)    @Override    public void buildCpu(String cpu) {        phone.cpu=cpu;    }    @Override    public void buildMem(String mem) {        phone.mem=mem;    }    @Override    public void buildDisk(String disk) {        phone.disk=disk;    }    @Override    public void buildSize(String size) {        phone.size=size;    }}

4.創(chuàng)建測(cè)試類

public class MainTest {    public static void main(String[] args) {        VivoPhoneBuilder builder = new VivoPhoneBuilder();        builder.buildCpu("888");        builder.buildDisk("512");        builder.buildMem("16");        builder.buildSize("plus");        Phone phone = builder.getPhone();        System.out.println(phone);    }}

5.輸出結(jié)果

如果我這時(shí)需要生產(chǎn)OPPO手機(jī),只需新建一個(gè)OppoPhoneBuilder實(shí)現(xiàn)Builder接口即可。

鏈?zhǔn)秸{(diào)用

相信大家在開發(fā)中都遇見過這樣的代碼,像鏈子一樣可以一直調(diào)用下去。

那么如何實(shí)現(xiàn)鏈?zhǔn)浇ㄔ煺?/strong>呢?

有以下兩種方式:

1.修改返回值為Builder

public interface Builder {    Phone phone = new Phone();    // void 改為 Builder 同步修改實(shí)現(xiàn)類    Builder buildCpu(String cpu);    Builder buildMem(String mem);    Builder buildDisk(String disk);    Builder buildSize(String size);    default Phone getPhone(){        return phone;    }}

測(cè)試1

public class MainTest {    public static void main(String[] args) {        // ……        VivoPhoneBuilder builder2 = new VivoPhoneBuilder();        Phone phone1 = builder2                .buildCpu("888")                .buildDisk("512")                .buildMem("16")                .buildSize("plus")                .getPhone();        System.out.println("phone1:"+phone1);    }}

結(jié)果1

2.使用lombok

@Data@Builder   //使用鏈?zhǔn)浇ㄔ煺?/span>@NoArgsConstructor@AllArgsConstructorpublic class Phone {   // ……} 

測(cè)試2

public class MainTest {    public static void main(String[] args) {      				// ……              Phone build = Phone.builder()                .cpu("888")                .mem("16")                .disk("512")                .size("plus").build();        System.out.println("builder:"+build);    }}

結(jié)果2

應(yīng)用場(chǎng)景

  • StringBuilder:append(); 給誰(shuí)append呢?
    public AbstractStringBuilder append(String str) {        if (str == null)            return appendNull();        int len = str.length();        ensureCapacityInternal(count + len);        str.getChars(0, len, value, count);        count += len;        return this;    }
  • Swagger-ApiBuilder;
  • 快速實(shí)現(xiàn):Lombok-@Builder

總結(jié)

建造者模式提供了對(duì)于同一構(gòu)建過程的不同表示,像流水線一樣生產(chǎn)對(duì)象。對(duì)于新增的對(duì)象,只需要?jiǎng)?chuàng)建對(duì)應(yīng)的建造者即可,不需要修改源代碼。

lombok為我們提供了建造者模式的快速實(shí)現(xiàn)(@Builder),要應(yīng)用到實(shí)際編碼中。

粉絲福利

?Java:1.5G學(xué)習(xí)資料——回復(fù)「資料」
?算法:視頻書籍——回復(fù)「算法」

? 點(diǎn)擊下方卡片 關(guān)注后回復(fù) 關(guān)鍵詞 ?

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/121680.html

相關(guān)文章

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

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

    banana_pi 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(三): 建造模式

    摘要:書籍建造者類調(diào)用建造者高效能人士的七個(gè)習(xí)慣史蒂芬柯維勵(lì)志上面的這個(gè)類和第一個(gè)例子的效果一樣,但是長(zhǎng)度確減少不少,在有更多屬性的時(shí)候,減少的代碼量會(huì)更為明顯。參考內(nèi)容設(shè)計(jì)模式張容銘 showImg(https://segmentfault.com/img/remote/1460000015147692); 1 什么是建造者模式? 建造者模式(Builder)是將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表...

    hatlonely 評(píng)論0 收藏0
  • 從ES6重新認(rèn)識(shí)JavaScript設(shè)計(jì)模式(三): 建造模式

    摘要:書籍建造者類調(diào)用建造者高效能人士的七個(gè)習(xí)慣史蒂芬柯維勵(lì)志上面的這個(gè)類和第一個(gè)例子的效果一樣,但是長(zhǎng)度確減少不少,在有更多屬性的時(shí)候,減少的代碼量會(huì)更為明顯。參考內(nèi)容設(shè)計(jì)模式張容銘 showImg(https://segmentfault.com/img/remote/1460000015147692); 1 什么是建造者模式? 建造者模式(Builder)是將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表...

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

    摘要:在建造者模式比較龐大時(shí),導(dǎo)演類可以有多個(gè)。該種場(chǎng)景只能是一個(gè)補(bǔ)償方法,因?yàn)橐粋€(gè)對(duì)象不容易獲得,而在設(shè)計(jì)階段竟然沒有發(fā)覺,而要通過創(chuàng)建者模式柔化創(chuàng)建過程,本身已經(jīng)違反設(shè)計(jì)的最初目標(biāo)。源碼地址參考文獻(xiàn)設(shè)計(jì)模式之禪 定義 Separate the construction of a complex object from its representation so that the same...

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

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

0條評(píng)論

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