最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式之建造者模式的示例詳解

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

定義

建造者模式(Builder Pattern),又叫生成器模式,是一種對(duì)象構(gòu)建模式 它可以將復(fù)雜對(duì)象的建造過(guò)程抽象出來(lái),使這個(gè)抽象過(guò)程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對(duì)象。建造者模式是一步一步創(chuàng)建一個(gè)復(fù)雜的對(duì)象,它允許用戶只通過(guò)指定復(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é)果

方案二

定義女生類

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

對(duì)比分析

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

總結(jié)

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

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

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

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

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

注意點(diǎn)

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

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

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

相關(guān)文章

  • 一文搞懂Spring中的JavaConfig

    一文搞懂Spring中的JavaConfig

    這篇文章主要介紹了Spring中的JavaConfig知識(shí),包括事務(wù)注解驅(qū)動(dòng),properties配置文件加載方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-09-09
  • 詳解Java設(shè)計(jì)模式之單例模式

    詳解Java設(shè)計(jì)模式之單例模式

    單例模式是一種創(chuàng)建型設(shè)計(jì)模式,它的目的是確保一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)全局訪問(wèn)點(diǎn)來(lái)訪問(wèn)該實(shí)例,在單例模式中,類自身負(fù)責(zé)創(chuàng)建自己的唯一實(shí)例,并確保在系統(tǒng)中只有一個(gè)實(shí)例存在,本文詳細(xì)介紹了Java設(shè)計(jì)模式中的單例模式,感興趣的同學(xué)可以參考閱讀
    2023-05-05
  • Mybatis批量插入更新xml方式和注解方式的方法實(shí)例

    Mybatis批量插入更新xml方式和注解方式的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Mybatis批量插入更新xml方式和注解方式的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Java進(jìn)行文件格式校驗(yàn)的方案詳解

    Java進(jìn)行文件格式校驗(yàn)的方案詳解

    這篇文章主要為大家詳細(xì)介紹了Java中進(jìn)行文件格式校驗(yàn)的相關(guān)方案,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • 在Spring異步調(diào)用中傳遞上下文的方法

    在Spring異步調(diào)用中傳遞上下文的方法

    這篇文章主要給大家介紹了關(guān)于如何在Spring異步調(diào)用中傳遞上下文的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JDK8通過(guò)Stream 對(duì)List,Map操作和互轉(zhuǎn)的實(shí)現(xiàn)

    JDK8通過(guò)Stream 對(duì)List,Map操作和互轉(zhuǎn)的實(shí)現(xiàn)

    這篇文章主要介紹了JDK8通過(guò)Stream 對(duì)List,Map操作和互轉(zhuǎn)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Java Web 登錄頁(yè)面的實(shí)現(xiàn)代碼實(shí)例

    Java Web 登錄頁(yè)面的實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Java Web 登錄頁(yè)面的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 微信小程序微信登錄的實(shí)現(xiàn)方法詳解(JAVA后臺(tái))

    微信小程序微信登錄的實(shí)現(xiàn)方法詳解(JAVA后臺(tái))

    通常我們?cè)诘卿浳⑿判〕绦虻臅r(shí)候都是通過(guò)授權(quán)登錄,下面這篇文章主要給大家介紹了關(guān)于微信小程序微信登錄的實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼介紹的介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • Java Web項(xiàng)目中編寫(xiě)定時(shí)任務(wù)的實(shí)現(xiàn)

    Java Web項(xiàng)目中編寫(xiě)定時(shí)任務(wù)的實(shí)現(xiàn)

    本篇文章主要介紹了Java Web項(xiàng)目中編寫(xiě)定時(shí)任務(wù)的實(shí)現(xiàn),具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-01-01
  • Java中InetAddress類的使用

    Java中InetAddress類的使用

    InetAddress類是Java中用于表示IP地址的類,本文就來(lái)介紹一下Java中InetAddress類的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-09-09

最新評(píng)論

滦南县| 昌黎县| 阿鲁科尔沁旗| 宝鸡市| 德钦县| 德令哈市| 青海省| 陆良县| 惠安县| 花莲市| 洪洞县| 清徐县| 仪征市| 樟树市| 安阳县| 泰顺县| 正镶白旗| 安新县| 铜鼓县| 武邑县| 安泽县| 遂平县| 昭苏县| 临猗县| 深水埗区| 金寨县| 璧山县| 衢州市| 安仁县| 扬中市| 来安县| 巴青县| 锡林郭勒盟| 银川市| 乌拉特后旗| 邹城市| 扶风县| 九龙城区| 县级市| 曲阳县| 牙克石市|