最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

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

2023-08-18 22:57 作者:bili_52912388700  | 我要投稿

什么是建造者模式

建造者模式(Builder Pattern)是一種對(duì)象構(gòu)建設(shè)計(jì)模式,它可以將一個(gè)復(fù)雜對(duì)象的構(gòu)建邏輯與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。該模式是為了將構(gòu)造復(fù)雜對(duì)象的過程和它的部件解耦。


主要解決什么問題

建造者模式主要解決了在軟件系統(tǒng)中,有時(shí)存在著復(fù)雜對(duì)象的創(chuàng)建工作,其通常由多個(gè)部分的組裝和步驟組成。與其他創(chuàng)建型模式相比,建造者模式更注重一步步創(chuàng)建復(fù)雜對(duì)象的過程。


在什么時(shí)候我們需要使用建造者模式

當(dāng)我們需要?jiǎng)?chuàng)建的對(duì)象非常復(fù)雜,包含多個(gè)組成部分,并且對(duì)象的創(chuàng)建需要一系列的步驟時(shí),我們通常會(huì)選擇使用建造者模式。


生活中的應(yīng)用實(shí)例

一個(gè)很好的例子是在吃快餐時(shí),我們通常會(huì)選擇一個(gè)套餐,這個(gè)套餐包含漢堡、薯?xiàng)l和飲料。盡管每個(gè)部分的制作過程可能有所不同,但是我們不必關(guān)心這些細(xì)節(jié),只需要選擇我們想要的套餐類型即可。


優(yōu)點(diǎn)

客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對(duì)象。

每一個(gè)具體建造者都相對(duì)獨(dú)立,可以很方便地替換或增加新的建造者,用戶使用不同的具體建造者即可得到不同的產(chǎn)品對(duì)象。

缺點(diǎn)

建造者模式所創(chuàng)建的產(chǎn)品一般有較多的共同點(diǎn),其組成部分相似,如果產(chǎn)品之間的差異性很大,例如不同的部件,建造者模式可能無法滿足需求。

使用場景

建造者模式通常在以下場景中使用:


需要生成的產(chǎn)品對(duì)象有復(fù)雜的內(nèi)部結(jié)構(gòu),這些產(chǎn)品對(duì)象通常包含多個(gè)部分。

需要生成的產(chǎn)品對(duì)象的屬性相互依賴,建造者模式可以強(qiáng)制進(jìn)行一步步的構(gòu)造過程,不允許跳過必要的步驟。

代碼舉例

java

Copy

public class Burger {

? ? private String size;

? ? private boolean cheese;

? ? private boolean pepperoni;

? ? private boolean lettuce;

? ? private boolean tomato;


? ? public Burger(BurgerBuilder builder) {

? ? ? ? this.size = builder.size;

? ? ? ? this.cheese = builder.cheese;

? ? ? ? this.pepperoni = builder.pepperoni;

? ? ? ? this.lettuce = builder.lettuce;

? ? ? ? this.tomato = builder.tomato;

? ? }


? ? // getters and toString()...

}


public class BurgerBuilder {

? ? public String size;

? ? public boolean cheese = false;

? ? public boolean pepperoni = false;

? ? public boolean lettuce = false;

? ? public boolean tomato = false;


? ? public BurgerBuilder(String size) {

? ? ? ? this.size = size;

? ? }


? ? public BurgerBuilder addCheese() {

? ? ? ? this.cheese = true;

? ? ? ? return this;

? ? }


? ? public BurgerBuilder addPepperoni() {

? ? ? ? this.pepperoni = true;

? ? ? ? return this;

? ? }


? ? public BurgerBuilder addLettuce() {

? ? ? ? this.lettuce = true;

? ? ? ? return this;

? ? }


? ? public BurgerBuilder addTomato() {

? ? ? ? this.tomato = true;

? ? ? ? return this;

? ? }


? ? public Burger build() {

? ? ? ? return new Burger(this);

? ? }

}


public class Main {

? ? public static void main(String[] args) {

? ? ? ? Burger burger = new BurgerBuilder("Large")

? ? ? ? ? ? ? ? .addPepperoni()

? ? ? ? ? ? ? ? .addLettuce()

? ? ? ? ? ? ? ? .addTomato()

? ? ? ? ? ? ? ? .build();

? ? ? ? System.out.println(burger);

? ? }

}

在這個(gè)例子中,BurgerBuilder 就是一個(gè)建造者,它負(fù)責(zé)創(chuàng)建 `

Burger對(duì)象。通過鏈?zhǔn)秸{(diào)用方法,我們可以自由地添加我們想要的組件(例如,addPepperoni()、addLettuce()、addTomato()),然后調(diào)用 build() 方法就可以得到一個(gè) Burger 對(duì)象。


這樣做的好處是,我們可以控制 Burger 對(duì)象的創(chuàng)建過程,同時(shí)不暴露其內(nèi)部的構(gòu)建細(xì)節(jié)。此外,如果我們想要?jiǎng)?chuàng)建一個(gè)稍微不同的 Burger,只需要更改一下構(gòu)建步驟即可。

Java設(shè)計(jì)模式之-建造者模式的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
娄烦县| 宝山区| 得荣县| 静宁县| 唐海县| 宣汉县| 苍溪县| 海丰县| 普定县| 苍梧县| 星子县| 富锦市| 辽阳县| 佛山市| 青阳县| 晋城| 神池县| 惠州市| 榆林市| 定边县| 安阳县| 蒙城县| 寿宁县| 盖州市| 泾阳县| 左权县| 平南县| 新建县| 陆丰市| 丰宁| 石台县| 松阳县| 葫芦岛市| 长海县| 永昌县| 冀州市| 芒康县| 西藏| 乌兰浩特市| 略阳县| 汨罗市|