摘要:上期原型模式發(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ì)。
本文源碼:建造者模式 提取碼: vpqt
建議跟著一條學(xué)設(shè)計(jì)模式的小伙伴都建一個(gè)maven
工程,并安裝lombok
依賴和插件。
并建立如下包目錄,便于歸納整理。
pom
如下
<dependency> <groupId>org.projectlombokgroupId> <artifactId>lombokartifactId> <version>1.16.10version> dependency>
現(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
接口即可。
相信大家在開發(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
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; }
Lombok-@Builder
建造者模式提供了對(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ù)「算法」
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/121680.html
摘要:建造者實(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...
摘要:書籍建造者類調(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)建層與其表...
摘要:書籍建造者類調(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)建層與其表...
摘要:在建造者模式比較龐大時(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...
閱讀 2574·2021-09-30 09:48
閱讀 2564·2019-08-30 14:10
閱讀 2707·2019-08-29 11:22
閱讀 1837·2019-08-26 13:51
閱讀 2275·2019-08-26 12:02
閱讀 2415·2019-08-23 16:06
閱讀 3548·2019-08-23 14:06
閱讀 1092·2019-08-23 13:56