Java創(chuàng)建型設(shè)計(jì)模式之建造者模式詳解
建造者模式是Java中一種創(chuàng)建型設(shè)計(jì)模式,它的主要目的是將一個復(fù)雜對象的構(gòu)建過程分解為多個簡單對象的構(gòu)建過程,并且使這些構(gòu)建過程按照一定的順序進(jìn)行組裝,最終實(shí)現(xiàn)對復(fù)雜對象的創(chuàng)建。本文將詳細(xì)介紹Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實(shí)現(xiàn)方法以及應(yīng)用場景等方面。
前言
當(dāng)我們需要創(chuàng)建一個具有多個屬性或組件的對象時,通常需要使用大量的構(gòu)造函數(shù)和setter方法。隨著屬性或組件的增加,這種方式很容易變得混亂和難以維護(hù)。此時,建造者模式就可以很好地解決這個問題。
建造者模式將對象的構(gòu)建過程分解為多個步驟,由調(diào)用端根據(jù)需要選擇所需的步驟,并按照一定的順序進(jìn)行組裝,最終實(shí)現(xiàn)對復(fù)雜對象的創(chuàng)建。通過使用建造者模式,可以將對象的構(gòu)建過程和具體的構(gòu)建實(shí)現(xiàn)分離開來,從而提高代碼的可維護(hù)性和可讀性。
定義
建造者模式是一種創(chuàng)建型模式,其定義如下:
將一個復(fù)雜對象的構(gòu)建過程與其表示相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。
換句話說,建造者模式將對象的構(gòu)建過程分解為多個簡單對象的構(gòu)建過程,并按照一定的順序進(jìn)行組裝,從而實(shí)現(xiàn)對復(fù)雜對象的創(chuàng)建。通過使用建造者模式,可以使對象的構(gòu)建過程和具體的構(gòu)建實(shí)現(xiàn)相互獨(dú)立,從而提高代碼的可維護(hù)性和可讀性。
結(jié)構(gòu)
建造者模式包含以下幾個角色:
1.產(chǎn)品類(Product)
產(chǎn)品類是一個具有多個屬性或組件的復(fù)雜對象,它由多個簡單對象組成。
public class Product {
private String part1;
private String part2;
private String part3;
// 省略 getter 和 setter 方法
}2.抽象建造者類(Builder)
建造者類是一個抽象類或接口,它定義了創(chuàng)建產(chǎn)品對象的各個部分的抽象方法。在實(shí)際應(yīng)用中,通常需要定義多個不同的建造者類來創(chuàng)建不同類型的產(chǎn)品對象。
public interface Builder {
void buildPart1();
void buildPart2();
void buildPart3();
Product getResult();
}3.具體建造者類(ConcreteBuilder)
具體建造者類是抽象建造者類的子類,它實(shí)現(xiàn)了抽象建造者類中定義的所有抽象方法,并且根據(jù)具體需求組裝產(chǎn)品對象的各個部分。
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)品對象的各個部分。在實(shí)際應(yīng)用中,通常只需要一個指導(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í)際使用建造者模式時,通常需要按照以下步驟進(jìn)行操作:
1.定義產(chǎn)品類
首先,需要定義一個具有多個屬性或組件的復(fù)雜對象,即產(chǎn)品類。
2.定義抽象建造者類
接著,需要定義一個抽象建造者類或接口,其中包含了創(chuàng)建產(chǎn)品對象各個部分的抽象方法。
3.定義具體建造者類
然后,需要定義一個或多個具體建造者類,它們是抽象建造者類的子類,實(shí)現(xiàn)了抽象建造者類中定義的抽象方法,并且根據(jù)具體需求組裝產(chǎn)品對象的各個部分。
4.定義指導(dǎo)者類
最后,需要定義一個指導(dǎo)者類,它負(fù)責(zé)創(chuàng)建具體建造者類的實(shí)例,并調(diào)用具體建造者類中的方法來組裝產(chǎn)品對象的各個部分。在實(shí)際應(yīng)用中,通常只需要一個指導(dǎo)者類即可。
5.使用建造者模式創(chuàng)建對象
最后,我們可以使用建造者模式來創(chuàng)建對象,即先創(chuàng)建一個具體建造者類的實(shí)例,然后將該實(shí)例交給指導(dǎo)者類進(jìn)行組裝,最終得到一個完整的產(chǎn)品對象。
Builder builder = new ConcreteBuilder(); Director director = new Director(); director.construct(builder); Product product = builder.getResult();
以上就是建造者模式的實(shí)現(xiàn)方法,下面我們來介紹一下它的應(yīng)用場景。
應(yīng)用場景
建造者模式適用于以下場景:
1.對象的構(gòu)建過程比較復(fù)雜
當(dāng)需要創(chuàng)建的對象較為復(fù)雜,需要通過多個步驟來生成時,可以使用建造者模式。
2.需要生成不同表示的對象
當(dāng)需要按照不同的邏輯順序來創(chuàng)建對象時,或者需要生成不同表示的對象時,可以使用建造者模式。
3.希望分離對象的構(gòu)建過程和表示
當(dāng)希望分離對象的構(gòu)建過程和具體表示時,可以使用建造者模式。
例如,在Java中,StringBuilder就是使用了建造者模式。在程序中,我們經(jīng)常需要拼接字符串,如果使用String類型來拼接字符串,每次拼接都會創(chuàng)建一個新的String對象,會浪費(fèi)大量的內(nèi)存。而使用StringBuilder,它將所需的字符串逐個添加進(jìn)去,并在需要時將它們組裝成一個完整的字符串對象,從而避免了不必要的內(nèi)存浪費(fèi)。
另外,在Java中,JDK中提供的Calendar類也使用了建造者模式。在創(chuàng)建日期時間對象時,需要設(shè)置年、月、日、時、分、秒等信息,如果使用普通的構(gòu)造函數(shù)或setter方法來設(shè)置這些信息,會使得代碼變得冗長且難以維護(hù)。而通過使用Calendar類提供的建造者模式,可以將這些設(shè)置信息分解為多個簡單的步驟,并按照一定的順序進(jìn)行組裝,從而實(shí)現(xiàn)對日期時間對象的創(chuàng)建。
總結(jié)
通過本文的介紹,我們了解了Java中的建造者模式,包括它的定義、結(jié)構(gòu)、實(shí)現(xiàn)方法以及應(yīng)用場景等方面。建造者模式將對象的構(gòu)建過程分解為多個簡單對象的構(gòu)建過程,并按照一定的順序進(jìn)行組裝,最終實(shí)現(xiàn)對復(fù)雜對象的創(chuàng)建。通過使用建造者模式,可以將對象的構(gòu)建過程和具體的構(gòu)建實(shí)現(xiàn)分離開來,從而提高代碼的可維護(hù)性和可讀性。
到此這篇關(guān)于Java創(chuàng)建型設(shè)計(jì)模式之建造者模式詳解的文章就介紹到這了,更多相關(guān)Java建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring event 事件異步處理方式(發(fā)布,監(jiān)聽,異步處理)
這篇文章主要介紹了spring event 事件異步處理方式(發(fā)布,監(jiān)聽,異步處理),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
Spring?Boot?3?整合?MinIO?實(shí)現(xiàn)分布式文件存儲的全過程
本文介紹了如何使用SpringBoot3和MinIO實(shí)現(xiàn)分布式文件存儲,通過MinIO的分布式對象存儲系統(tǒng),可以解決傳統(tǒng)單機(jī)文件存儲方案在面對大規(guī)模數(shù)據(jù)和高并發(fā)訪問時的不足,文章詳細(xì)講解了MinIO的安裝、配置和使用,感興趣的朋友一起看看吧2025-03-03
SpringBoot的@RestControllerAdvice作用詳解
這篇文章主要介紹了SpringBoot的@RestControllerAdvice作用詳解,@RestContrllerAdvice是一種組合注解,由@ControllerAdvice,@ResponseBody組成,本質(zhì)上就是@Component,需要的朋友可以參考下2024-01-01
mybatis中Oracle參數(shù)為NULL錯誤問題及解決
這篇文章主要介紹了mybatis中Oracle參數(shù)為NULL錯誤問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12
SpringCloud網(wǎng)關(guān)(Zuul)如何給多個微服務(wù)之間傳遞共享參數(shù)
這篇文章主要介紹了SpringCloud網(wǎng)關(guān)(Zuul)如何給多個微服務(wù)之間傳遞共享參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
spring cloud學(xué)習(xí)教程之config修改配置詳解
這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)教程之config修改配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-09-09
java實(shí)戰(zhàn)小技巧之優(yōu)雅的實(shí)現(xiàn)字符串拼接
字符串拼接是我們在Java代碼中比較經(jīng)常要做的事情,就是把多個字符串拼接到一起,這篇文章主要給大家介紹了關(guān)于java實(shí)戰(zhàn)小技巧之優(yōu)雅的實(shí)現(xiàn)字符串拼接的相關(guān)資料,需要的朋友可以參考下2021-08-08

