欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java創(chuàng)建型設(shè)計(jì)模式之建造者模式詳解

 更新時(shí)間:2023年05月11日 08:49:09   作者:蜀山劍客李沐白  
建造者模式是Java中一種創(chuàng)建型設(shè)計(jì)模式,它的主要目的是將一個(gè)復(fù)雜對(duì)象的構(gòu)建過程分解為多個(gè)簡單對(duì)象的構(gòu)建過程,本文將詳細(xì)介紹Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實(shí)現(xiàn)方法以及應(yīng)用場(chǎng)景等方面,希望對(duì)大家有所幫助

建造者模式是Java中一種創(chuàng)建型設(shè)計(jì)模式,它的主要目的是將一個(gè)復(fù)雜對(duì)象的構(gòu)建過程分解為多個(gè)簡單對(duì)象的構(gòu)建過程,并且使這些構(gòu)建過程按照一定的順序進(jìn)行組裝,最終實(shí)現(xiàn)對(duì)復(fù)雜對(duì)象的創(chuàng)建。本文將詳細(xì)介紹Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實(shí)現(xiàn)方法以及應(yīng)用場(chǎng)景等方面。

前言

當(dāng)我們需要?jiǎng)?chuàng)建一個(gè)具有多個(gè)屬性或組件的對(duì)象時(shí),通常需要使用大量的構(gòu)造函數(shù)和setter方法。隨著屬性或組件的增加,這種方式很容易變得混亂和難以維護(hù)。此時(shí),建造者模式就可以很好地解決這個(gè)問題。

建造者模式將對(duì)象的構(gòu)建過程分解為多個(gè)步驟,由調(diào)用端根據(jù)需要選擇所需的步驟,并按照一定的順序進(jìn)行組裝,最終實(shí)現(xiàn)對(duì)復(fù)雜對(duì)象的創(chuàng)建。通過使用建造者模式,可以將對(duì)象的構(gòu)建過程和具體的構(gòu)建實(shí)現(xiàn)分離開來,從而提高代碼的可維護(hù)性和可讀性。

定義

建造者模式是一種創(chuàng)建型模式,其定義如下:

將一個(gè)復(fù)雜對(duì)象的構(gòu)建過程與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

換句話說,建造者模式將對(duì)象的構(gòu)建過程分解為多個(gè)簡單對(duì)象的構(gòu)建過程,并按照一定的順序進(jìn)行組裝,從而實(shí)現(xiàn)對(duì)復(fù)雜對(duì)象的創(chuàng)建。通過使用建造者模式,可以使對(duì)象的構(gòu)建過程和具體的構(gòu)建實(shí)現(xiàn)相互獨(dú)立,從而提高代碼的可維護(hù)性和可讀性。

結(jié)構(gòu)

建造者模式包含以下幾個(gè)角色:

1.產(chǎn)品類(Product)

產(chǎn)品類是一個(gè)具有多個(gè)屬性或組件的復(fù)雜對(duì)象,它由多個(gè)簡單對(duì)象組成。

public class Product {
    private String part1;
    private String part2;
    private String part3;

    // 省略 getter 和 setter 方法
}

2.抽象建造者類(Builder)

建造者類是一個(gè)抽象類或接口,它定義了創(chuàng)建產(chǎn)品對(duì)象的各個(gè)部分的抽象方法。在實(shí)際應(yīng)用中,通常需要定義多個(gè)不同的建造者類來創(chuàng)建不同類型的產(chǎn)品對(duì)象。

public interface Builder {
    void buildPart1();
    void buildPart2();
    void buildPart3();
    Product getResult();
}

3.具體建造者類(ConcreteBuilder)

具體建造者類是抽象建造者類的子類,它實(shí)現(xiàn)了抽象建造者類中定義的所有抽象方法,并且根據(jù)具體需求組裝產(chǎn)品對(duì)象的各個(gè)部分。

public class ConcreteBuilder implements Builder {
    private Product product = new Product();

    @Override
    public void buildPart1() {
        product.setPart1("part1");
    }

    @Override
    public void buildPart2() {
        product.setPart2("part2");
    }

    @Override
    public void buildPart3() {
        product.setPart3("part3");
    }

    @Override
    public Product getResult() {
        return product;
    }
}

4.指導(dǎo)者類(Director)

指導(dǎo)者類負(fù)責(zé)創(chuàng)建具體建造者類的實(shí)例,并調(diào)用具體建造者類中的方法來組裝產(chǎn)品對(duì)象的各個(gè)部分。在實(shí)際應(yīng)用中,通常只需要一個(gè)指導(dǎo)者類即可。

public class Director {
    public void construct(Builder builder) {
        builder.buildPart1();
        builder.buildPart2();
        builder.buildPart3();
    }
}

以上就是建造者模式的結(jié)構(gòu),下面我們來詳細(xì)說明其實(shí)現(xiàn)方法。

實(shí)現(xiàn)方法

在實(shí)際使用建造者模式時(shí),通常需要按照以下步驟進(jìn)行操作:

1.定義產(chǎn)品類

首先,需要定義一個(gè)具有多個(gè)屬性或組件的復(fù)雜對(duì)象,即產(chǎn)品類。

2.定義抽象建造者類

接著,需要定義一個(gè)抽象建造者類或接口,其中包含了創(chuàng)建產(chǎn)品對(duì)象各個(gè)部分的抽象方法。

3.定義具體建造者類

然后,需要定義一個(gè)或多個(gè)具體建造者類,它們是抽象建造者類的子類,實(shí)現(xiàn)了抽象建造者類中定義的抽象方法,并且根據(jù)具體需求組裝產(chǎn)品對(duì)象的各個(gè)部分。

4.定義指導(dǎo)者類

最后,需要定義一個(gè)指導(dǎo)者類,它負(fù)責(zé)創(chuàng)建具體建造者類的實(shí)例,并調(diào)用具體建造者類中的方法來組裝產(chǎn)品對(duì)象的各個(gè)部分。在實(shí)際應(yīng)用中,通常只需要一個(gè)指導(dǎo)者類即可。

5.使用建造者模式創(chuàng)建對(duì)象

最后,我們可以使用建造者模式來創(chuàng)建對(duì)象,即先創(chuàng)建一個(gè)具體建造者類的實(shí)例,然后將該實(shí)例交給指導(dǎo)者類進(jìn)行組裝,最終得到一個(gè)完整的產(chǎn)品對(duì)象。

Builder builder = new ConcreteBuilder();
Director director = new Director();
director.construct(builder);
Product product = builder.getResult();

以上就是建造者模式的實(shí)現(xiàn)方法,下面我們來介紹一下它的應(yīng)用場(chǎng)景。

應(yīng)用場(chǎng)景

建造者模式適用于以下場(chǎng)景:

1.對(duì)象的構(gòu)建過程比較復(fù)雜

當(dāng)需要?jiǎng)?chuàng)建的對(duì)象較為復(fù)雜,需要通過多個(gè)步驟來生成時(shí),可以使用建造者模式。

2.需要生成不同表示的對(duì)象

當(dāng)需要按照不同的邏輯順序來創(chuàng)建對(duì)象時(shí),或者需要生成不同表示的對(duì)象時(shí),可以使用建造者模式。

3.希望分離對(duì)象的構(gòu)建過程和表示

當(dāng)希望分離對(duì)象的構(gòu)建過程和具體表示時(shí),可以使用建造者模式。

例如,在Java中,StringBuilder就是使用了建造者模式。在程序中,我們經(jīng)常需要拼接字符串,如果使用String類型來拼接字符串,每次拼接都會(huì)創(chuàng)建一個(gè)新的String對(duì)象,會(huì)浪費(fèi)大量的內(nèi)存。而使用StringBuilder,它將所需的字符串逐個(gè)添加進(jìn)去,并在需要時(shí)將它們組裝成一個(gè)完整的字符串對(duì)象,從而避免了不必要的內(nèi)存浪費(fèi)。

另外,在Java中,JDK中提供的Calendar類也使用了建造者模式。在創(chuàng)建日期時(shí)間對(duì)象時(shí),需要設(shè)置年、月、日、時(shí)、分、秒等信息,如果使用普通的構(gòu)造函數(shù)或setter方法來設(shè)置這些信息,會(huì)使得代碼變得冗長且難以維護(hù)。而通過使用Calendar類提供的建造者模式,可以將這些設(shè)置信息分解為多個(gè)簡單的步驟,并按照一定的順序進(jìn)行組裝,從而實(shí)現(xiàn)對(duì)日期時(shí)間對(duì)象的創(chuàng)建。

總結(jié)

通過本文的介紹,我們了解了Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實(shí)現(xiàn)方法以及應(yīng)用場(chǎng)景等方面。建造者模式將對(duì)象的構(gòu)建過程分解為多個(gè)簡單對(duì)象的構(gòu)建過程,并按照一定的順序進(jìn)行組裝,最終實(shí)現(xiàn)對(duì)復(fù)雜對(duì)象的創(chuàng)建。通過使用建造者模式,可以將對(duì)象的構(gòu)建過程和具體的構(gòu)建實(shí)現(xiàn)分離開來,從而提高代碼的可維護(hù)性和可讀性。

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

相關(guān)文章

  • java實(shí)現(xiàn)點(diǎn)擊按鈕彈出新窗體功能

    java實(shí)現(xiàn)點(diǎn)擊按鈕彈出新窗體功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)點(diǎn)擊按鈕彈出新窗體功能,舊窗體不進(jìn)行操作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Elasticsearch?計(jì)數(shù)分詞中的token使用實(shí)例

    Elasticsearch?計(jì)數(shù)分詞中的token使用實(shí)例

    這篇文章主要為大家介紹了Elasticsearch?計(jì)數(shù)分詞中的token使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • SpringBoot攔截器的使用小結(jié)

    SpringBoot攔截器的使用小結(jié)

    今天給大家總結(jié)一下SpringBoot下攔截器的使用,需要的朋友參考下吧
    2017-05-05
  • java基礎(chǔ)之接口組成更新的實(shí)現(xiàn)

    java基礎(chǔ)之接口組成更新的實(shí)現(xiàn)

    本文主要介紹了java基礎(chǔ)之接口組成更新的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Spring MVC整合Shiro權(quán)限控制的方法

    Spring MVC整合Shiro權(quán)限控制的方法

    這篇文章主要介紹了Spring MVC整合Shiro權(quán)限控制,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java實(shí)現(xiàn)分布式系統(tǒng)限流

    Java實(shí)現(xiàn)分布式系統(tǒng)限流

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)分布式系統(tǒng)限流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 多模字符串匹配算法原理及Java實(shí)現(xiàn)代碼

    多模字符串匹配算法原理及Java實(shí)現(xiàn)代碼

    這篇文章主要介紹了多模字符串匹配算法原理及Java實(shí)現(xiàn)代碼,涉及算法背景,原理,構(gòu)建過程簡單介紹幾Java代碼實(shí)現(xiàn)等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式

    SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式

    這篇文章主要介紹了SpringBoot2.x設(shè)置Session失效時(shí)間及失效跳轉(zhuǎn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java獲取兩個(gè)List集合的交集代碼示例

    java獲取兩個(gè)List集合的交集代碼示例

    這篇文章主要給大家介紹了關(guān)于java獲取兩個(gè)List集合交集的相關(guān)資料,我們可以使用Stream操作來對(duì)集合進(jìn)行一系列的操作,其中包括求交集,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • JavaApi實(shí)現(xiàn)更新刪除及讀取節(jié)點(diǎn)

    JavaApi實(shí)現(xiàn)更新刪除及讀取節(jié)點(diǎn)

    這篇文章主要介紹了JavaApi實(shí)現(xiàn)更新刪除及讀取節(jié)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論