亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設計模式之建造者模式的示例詳解

 更新時間:2022年02月16日 11:39:08   作者:溫故知新之java  
建造者模式,是一種對象構(gòu)建模式 它可以將復雜對象的建造過程抽象出來,使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下

定義

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

案例

需求

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

方案一

定義女生抽象類

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

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

/**
 * 女生實現(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("海瀾之家");
    }
}

測試類

/**
 * 測試類
 * @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);
    }
}

查看測試結(jié)果

方案二

定義女生類

/**
 * 女生化妝
 * @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();

    //設計發(fā)型
    public abstract void buildHairstyle();
    //使用香水
    public abstract void buildPerfume();
    //設計衣服
    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("海瀾之家");
    }
}

定義化妝總設計師類(指揮者)

/**
 * 化妝總設計師(指揮者)
 * @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();
    }
}

定義測試類

/**
 * 測試類
 * @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é)果

對比分析

  • 方案一:普通的實現(xiàn)方式,采用了繼承抽象類的方式進行實現(xiàn),耦合性非常高,不易擴展
  • 方案二:建造者模式,將女生和化妝師化妝進行了解耦合,并且易擴展,更換化妝師也很方便;并且有一個化妝總設計師作為指揮者的角色,可以方便的控制化妝的順序,符合開閉原則

總結(jié)

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

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

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

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

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

注意點

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

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

到此這篇關(guān)于Java設計模式之建造者模式的示例詳解的文章就介紹到這了,更多相關(guān)Java建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SWT(JFace)體驗之FormLayout布局

    SWT(JFace)體驗之FormLayout布局

    SWT(JFace)體驗之FormLayout布局示例代碼。
    2009-06-06
  • Nacos?Client的Bug解決方法記錄

    Nacos?Client的Bug解決方法記錄

    這篇文章主要為大家介紹了Nacos?Client的Bug解決方法記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 設置Myeclipse中的代碼格式化、注釋模板及保存時自動格式化

    設置Myeclipse中的代碼格式化、注釋模板及保存時自動格式化

    這篇文章主要介紹了設置Myeclipse中的代碼格式化、注釋模板及保存時自動格式化方法,需要的朋友可以參考下
    2014-10-10
  • Android token過期刷新處理的方法示例

    Android token過期刷新處理的方法示例

    這篇文章主要介紹了Android token過期刷新處理的方法示例,本文詳細的介紹了2種方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-10-10
  • Java LocalCache 本地緩存的實現(xiàn)實例

    Java LocalCache 本地緩存的實現(xiàn)實例

    本篇文章主要介紹了Java LocalCache 本地緩存的實現(xiàn)實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-05-05
  • springboot中如何判斷某個bean是否存在

    springboot中如何判斷某個bean是否存在

    這篇文章主要介紹了springboot中如何判斷某個bean是否存在,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java樂觀鎖原理與實現(xiàn)案例分析

    java樂觀鎖原理與實現(xiàn)案例分析

    這篇文章主要介紹了java樂觀鎖原理與實現(xiàn),結(jié)合具體案例形式分析了樂觀鎖的原理及java使用樂觀鎖實現(xiàn)自動派單功能的相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • springAOP完整實現(xiàn)過程

    springAOP完整實現(xiàn)過程

    當你調(diào)用SimpleService類的doSomething方法時,上述的PerformanceAspect會自動攔截此調(diào)用,并且記錄該方法的執(zhí)行時間,這樣你就完成了一個針對Spring的AOP入門級案例,感興趣的朋友一起看看吧
    2024-02-02
  • Java源碼角度分析HashMap用法

    Java源碼角度分析HashMap用法

    這篇文章主要介紹了Java源碼角度分析HashMap用法,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • springboot?注解方式批量插入數(shù)據(jù)的實現(xiàn)

    springboot?注解方式批量插入數(shù)據(jù)的實現(xiàn)

    一次請求需要往數(shù)據(jù)庫插入多條數(shù)據(jù)時,可以節(jié)省大量時間,本文主要介紹了springboot?注解方式批量插入數(shù)據(jù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評論