溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java建造者模式的示例分析

發(fā)布時(shí)間:2022-02-16 13:45:39 來源:億速云 閱讀:136 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“Java建造者模式的示例分析”的相關(guān)知識(shí),小編通過實(shí)際案例向大家展示操作過程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“Java建造者模式的示例分析”文章能幫助大家解決問題。

Java建造者模式的示例分析

定義

建造者模式(Builder Pattern),又叫生成器模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過程抽象出來,使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。建造者模式是一步一步創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它允許用戶只通過指定復(fù)雜對(duì)象的類型和內(nèi)容就可 以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。

案例

需求

女生每天化妝,假如只需要做發(fā)型,香水,衣服,并要求按照發(fā)型——》香水——》衣服的順序進(jìn)行,用代碼實(shí)現(xiàn)

方案一

定義女生抽象類

/**
 * 女生抽象類
 * @author:liyajie
 * @createTime:2022/2/16 10:20
 * @version:1.0
 */
public abstract class AbstractWoman {
    //設(shè)計(jì)發(fā)型
    public abstract void buildHairstyle();
    //使用香水
    public abstract void buildPerfume();
    //設(shè)計(jì)衣服
    public abstract void buildClothing();
}

定義女生實(shí)現(xiàn)類

/**
 * 女生實(shí)現(xiàn)類
 * @author:liyajie
 * @createTime:2022/2/16 10:21
 * @version:1.0
 */
public class Woman extends AbstractWoman {
    @Override
    public void buildHairstyle() {
        System.out.println("馬尾造型");
    }

    @Override
    public void buildPerfume() {
        System.out.println("古龍香水");
    }

    @Override
    public void buildClothing() {
        System.out.println("海瀾之家");
    }
}

測(cè)試類

/**
 * 測(cè)試類
 * @author:liyajie
 * @createTime:2022/2/15 16:35
 * @version:1.0
 */
public class Test {
    public static void main(String[] args) {
        Woman woman = new Woman();
        woman.buildHairstyle();
        woman.buildPerfume();
        woman.buildClothing();
        System.out.println(woman);
    }
}

查看測(cè)試結(jié)果

Java建造者模式的示例分析

方案二

定義女生類

/**
 * 女生化妝
 * @author:liyajie
 * @createTime:2022/2/15 15:40
 * @version:1.0
 */
@Data
public class WomanNew {
    // 發(fā)型
    private String hairstyle;
    // 香水
    private String perfume;
    // 服裝
    private String clothing;

    //化完妝后的展示效果
    public void show(){
        System.out.println("化妝完成");
    }
}

定義化妝師抽象類

/**
 * 化妝師抽象類
 * @author:liyajie
 * @createTime:2022/2/15 15:58
 * @version:1.0
 */
public abstract class AbstractDresserNew {
    protected Woman woman = new Woman();

    //設(shè)計(jì)發(fā)型
    public abstract void buildHairstyle();
    //使用香水
    public abstract void buildPerfume();
    //設(shè)計(jì)衣服
    public abstract void buildClothing();

    public Woman getWoman(){
        return woman;
    }
}

定義具體的化妝師類

/**
 * 具體的化妝師
 * @author:liyajie
 * @createTime:2022/2/15 16:17
 * @version:1.0
 */
public class DresserNew extends AbstractDresserNew{
    @Override
    public void buildHairstyle() {
        woman.setHairstyle("馬尾造型");
    }

    @Override
    public void buildPerfume() {
        woman.setPerfume("古龍香水");
    }

    @Override
    public void buildClothing() {
        woman.setClothing("海瀾之家");
    }
}

定義化妝總設(shè)計(jì)師類(指揮者)

/**
 * 化妝總設(shè)計(jì)師(指揮者)
 * @author:liyajie
 * @createTime:2022/2/15 16:22
 * @version:1.0
 */
public class DresserManage {

    private AbstractDresser abstractDresser;

    public DresserManage(AbstractDresser abstractDresser){
        this.abstractDresser = abstractDresser;
    }

    public Woman makeUp(){
        abstractDresser.buildHairstyle();
        abstractDresser.buildPerfume();
        abstractDresser.buildClothing();
        return abstractDresser.getWoman();
    }
}

定義測(cè)試類

/**
 * 測(cè)試類
 * @author:liyajie
 * @createTime:2022/2/15 16:35
 * @version:1.0
 */
public class TestNew {
    public static void main(String[] args) {
        DresserNew dresser = new DresserNew();
        DresserManage dresserManage = new DresserManage(dresser);
        WomanNew womanNew = dresserManage.makeUp();
        System.out.println(womanNew);
    }
}

查看結(jié)果

Java建造者模式的示例分析

對(duì)比分析

  • 方案一:普通的實(shí)現(xiàn)方式,采用了繼承抽象類的方式進(jìn)行實(shí)現(xiàn),耦合性非常高,不易擴(kuò)展

  • 方案二:建造者模式,將女生和化妝師化妝進(jìn)行了解耦合,并且易擴(kuò)展,更換化妝師也很方便;并且有一個(gè)化妝總設(shè)計(jì)師作為指揮者的角色,可以方便的控制化妝的順序,符合開閉原則

總結(jié)

建造者模式的優(yōu)勢(shì):

將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦合

擴(kuò)展性很高,很方便的增加或者替換具體建造者

方便用程序來控制產(chǎn)品的創(chuàng)建過程以及順序

指揮者類針對(duì)抽象建造者編程,系統(tǒng)擴(kuò)展方便,符合開閉原則

注意點(diǎn)

建造者模式創(chuàng)建的產(chǎn)品一般組成部分類似,如果產(chǎn)品差異性非常大,不適合了,合理利用

如果產(chǎn)品內(nèi)部變化復(fù)雜,導(dǎo)致系統(tǒng)非常龐大,權(quán)衡

關(guān)于“Java建造者模式的示例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI