国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

03-JAVA設(shè)計(jì)模式-建造者模式

這篇具有很好參考價(jià)值的文章主要介紹了03-JAVA設(shè)計(jì)模式-建造者模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

建造者模式

什么是建造者模式

建造者模式(Builder Pattern)是一種對(duì)象構(gòu)建的設(shè)計(jì)模式,它允許你通過一步一步地構(gòu)建一個(gè)復(fù)雜對(duì)象,來隱藏復(fù)雜對(duì)象的創(chuàng)建細(xì)節(jié)。
這種模式將一個(gè)復(fù)雜對(duì)象的構(gòu)建過程與其表示過程分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。命名建議以Builder結(jié)尾,以達(dá)到見名之意。

在建造者模式中,通常包含以下幾個(gè)角色:

  • 產(chǎn)品(Product):這是最終要?jiǎng)?chuàng)建的對(duì)象,它通常包含多個(gè)屬性,并且可能具有復(fù)雜的內(nèi)部結(jié)構(gòu)。
  • 抽象建造者(Builder):這是一個(gè)接口或者抽象類,定義了創(chuàng)建產(chǎn)品所需的方法。這些方法通常是一系列設(shè)置產(chǎn)品屬性的步驟。
  • 具體建造者(ConcreteBuilder):這個(gè)類實(shí)現(xiàn)了抽象建造者接口,提供了構(gòu)建產(chǎn)品的具體實(shí)現(xiàn)。它包含了創(chuàng)建產(chǎn)品對(duì)象的所有邏輯,并可以一步步地設(shè)置產(chǎn)品對(duì)象的屬性。
  • 導(dǎo)演者(Director):這是一個(gè)可選的角色,它負(fù)責(zé)調(diào)用建造者接口中的方法來構(gòu)建產(chǎn)品對(duì)象。導(dǎo)演者可以簡(jiǎn)化客戶端代碼,使得客戶端無需關(guān)心具體的構(gòu)建步驟。

使用場(chǎng)景

  • 當(dāng)我們要建造一個(gè)復(fù)雜的產(chǎn)品。比如:手機(jī)時(shí)。這種復(fù)雜產(chǎn)品的創(chuàng)建,需要處理子組件裝配的問題。
  • 實(shí)際開發(fā)中,我們所需要的對(duì)象構(gòu)建時(shí)也非常復(fù)雜,有很多步驟需要處理時(shí)。

建造者模式的本質(zhì)

  • 分離了對(duì)象子組件的單獨(dú)構(gòu)造(有Buider來負(fù)責(zé))和裝配(有Director負(fù)責(zé))。從而可以構(gòu)造負(fù)責(zé)的對(duì)象。
  • 這個(gè)模式適用于在某個(gè)對(duì)象構(gòu)建過程復(fù)雜的情況下使用。
  • 由于實(shí)現(xiàn)了構(gòu)建和裝配的解耦。不同的構(gòu)建器,相同的裝配,可以做出不同的對(duì)象; 相同的構(gòu)建器,不同的裝配順序也可以做出不同的對(duì)象。也就是實(shí)現(xiàn)了構(gòu)建算法、裝配算法的解耦,實(shí)現(xiàn)了更好的復(fù)用。

案例

實(shí)現(xiàn)建造華為手機(jī)與小米手機(jī)

通過靜態(tài)內(nèi)部類作為建造者

Phone.java

public class Phone {
    // 機(jī)身
    private String fuselage;
    // 攝像頭
    private String camera;
    // 系統(tǒng)內(nèi)核
    private String systemKernel;

    // 私有構(gòu)造方法,只能通過建造者創(chuàng)建
    private Phone(Builder builder) {
        this.fuselage = builder.fuselage;
        this.camera = builder.camera;
        this.systemKernel = builder.systemKernel;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "fuselage='" + fuselage + '\'' +
                ", camera='" + camera + '\'' +
                ", systemKernel='" + systemKernel + '\'' +
                '}';
    }

    // 靜態(tài)內(nèi)部類作為建造者
    static class Builder {
        // 機(jī)身
        private String fuselage;
        // 攝像頭
        private String camera;
        // 系統(tǒng)內(nèi)核
        private String systemKernel;

        public Builder setFuselage(String fuselage) {
            this.fuselage = fuselage;
            return this;    // 鏈?zhǔn)秸{(diào)用
        }

        public Builder setCamera(String camera) {
            this.camera = camera;
            return this;    // 鏈?zhǔn)秸{(diào)用
        }

        public Builder setSystemKernel(String systemKernel) {
            this.systemKernel = systemKernel;
            return this;    // 鏈?zhǔn)秸{(diào)用
        }

        // 創(chuàng)建手機(jī)
        public Phone createPhone(){
            return new Phone(this);
        }
    }
}

Client.java

public class Client {
    public static void main(String[] args) {
        Phone phone = new Phone.Builder()
                .setCamera("華為攝像頭")
                .setFuselage("華為機(jī)身")
                .setSystemKernel("鴻蒙系統(tǒng)")
                .createPhone();
        System.out.println(phone);

        Phone phone2 = new Phone.Builder()
                .setCamera("小米攝像頭")
                .setFuselage("小米機(jī)身")
                .setSystemKernel("小米系統(tǒng)")
                .createPhone();
        System.out.println(phone2);
    }
}

執(zhí)行結(jié)果:

03-JAVA設(shè)計(jì)模式-建造者模式,技術(shù)棧,# Java設(shè)計(jì)模式,java,設(shè)計(jì)模式,建造者模式

通過接口實(shí)現(xiàn)建造者模式

UML

03-JAVA設(shè)計(jì)模式-建造者模式,技術(shù)棧,# Java設(shè)計(jì)模式,java,設(shè)計(jì)模式,建造者模式

不使用導(dǎo)演者

Phone.java

public class Phone {
    // 機(jī)身
    private String fuselage;
    // 攝像頭
    private String camera;
    // 系統(tǒng)內(nèi)核
    private String systemKernel;

    public void setFuselage(String fuselage) {
        this.fuselage = fuselage;
    }

    public void setCamera(String camera) {
        this.camera = camera;
    }

    public void setSystemKernel(String systemKernel) {
        this.systemKernel = systemKernel;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "fuselage=" + fuselage +
                ", camera=" + camera +
                ", systemKernel=" + systemKernel +
                '}';
    }
}

IPhoneBuider.java

// 手機(jī) 抽象建造者定義接口
public interface IPhoneBuider {
    // 設(shè)置機(jī)身
    IPhoneBuider setFuselage(String fuselage);
    // 設(shè)置攝像頭
    IPhoneBuider setCamera(String camera);
    // 設(shè)置系統(tǒng)內(nèi)核
    IPhoneBuider setSystemKernel(String systemKernel);
    // 返回創(chuàng)建對(duì)象
    Phone buildPhone();
}

PhoneBuilder.java

// 建造者具體實(shí)現(xiàn)
public class PhoneBuilder implements IPhoneBuider {
    // 定義建造者返回對(duì)象
    private Phone phone;
    public PhoneBuilder() {
        // 初始化Phone
        this.phone = new Phone();
    }
    @Override
    public IPhoneBuider setFuselage(String fuselage) {
        phone.setFuselage(fuselage);
        return this;
    }
    @Override
    public IPhoneBuider setCamera(String camera) {
        phone.setCamera(camera);
        return this;
    }
    @Override
    public IPhoneBuider setSystemKernel(String systemKernel) {
        phone.setSystemKernel(systemKernel);
        return this;
    }
    @Override
    public Phone buildPhone() {
        return phone;
    }
}

TestClient2.java

public class TestClient2 {
    public static void main(String[] args) {
        // 創(chuàng)建建造具體建造者
        PhoneBuilder phoneBuilder = new PhoneBuilder();

        Phone phone = phoneBuilder
                .setCamera("裝配小米攝像頭")
                .setFuselage("裝配小米機(jī)身")
                .setSystemKernel("裝配小米系統(tǒng)")
                .buildPhone();

        System.out.println(phone.toString());

    }
}

03-JAVA設(shè)計(jì)模式-建造者模式,技術(shù)棧,# Java設(shè)計(jì)模式,java,設(shè)計(jì)模式,建造者模式

使用導(dǎo)演者

新增導(dǎo)演者
HuaweiDirector.java

// 華為手機(jī)導(dǎo)演者
public class HuaweiDirector {
    // 定義建造者屬性
    private IPhoneBuider phoneBuider;

    public HuaweiDirector(IPhoneBuider phoneBuider) {
        this.phoneBuider = phoneBuider;
    }

    public Phone createPhone(){
        Phone phone = phoneBuider.setCamera("裝配華為攝像頭")
                .setFuselage("裝配華為機(jī)身")
                .setSystemKernel("裝配鴻蒙系統(tǒng)")
                .buildPhone();
        return phone;
    }
}

TestClient.java

public class TestClient {
    public static void main(String[] args) {
        // 創(chuàng)建建造具體建造者
        PhoneBuilder phoneBuilder = new PhoneBuilder();
        // 創(chuàng)建導(dǎo)演者 傳入具體建造者
        HuaweiDirector huaweiDirector = new HuaweiDirector(phoneBuilder);
        // 通過導(dǎo)演者構(gòu)建手機(jī)
        Phone phone = huaweiDirector.createPhone();
        System.out.println(phone.toString());
    }
}

03-JAVA設(shè)計(jì)模式-建造者模式,技術(shù)棧,# Java設(shè)計(jì)模式,java,設(shè)計(jì)模式,建造者模式

gitee源碼

git clone https://gitee.com/dchh/JavaStudyWorkSpaces.git文章來源地址http://www.zghlxwxcb.cn/news/detail-852191.html

到了這里,關(guān)于03-JAVA設(shè)計(jì)模式-建造者模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java建造者設(shè)計(jì)模式

    建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建成一個(gè)復(fù)雜的對(duì)象。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。一個(gè) Builder 類會(huì)一步一步構(gòu)造最終的對(duì)象。該 Builder 類是獨(dú)立于其他對(duì)象的。 Builder(抽象建造者) :它為創(chuàng)建一個(gè)產(chǎn)

    2024年02月15日
    瀏覽(23)
  • Java特性之設(shè)計(jì)模式【建造者模式】

    Java特性之設(shè)計(jì)模式【建造者模式】

    概述 建造者模式(Builder Pattern)使用多個(gè)簡(jiǎn)單的對(duì)象一步一步構(gòu)建成一個(gè)復(fù)雜的對(duì)象。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式 一個(gè) Builder 類會(huì)一步一步構(gòu)造最終的對(duì)象。該 Builder 類是獨(dú)立于其他對(duì)象的 主要解決 :主要解決在軟件系統(tǒng)中,有

    2024年02月07日
    瀏覽(18)
  • Java與設(shè)計(jì)模式(6):建造者模式

    建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計(jì)模式,它允許你逐步構(gòu)造復(fù)雜對(duì)象。該模式將對(duì)象的構(gòu)建過程與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 建造者模式的核心思想是將一個(gè)復(fù)雜對(duì)象的構(gòu)建過程分解為多個(gè)簡(jiǎn)單的步驟,通過一系列的步驟來逐步構(gòu)建對(duì)

    2024年02月11日
    瀏覽(17)
  • 【Java設(shè)計(jì)模式】建造者模式 & 注解@Builder

    【Java設(shè)計(jì)模式】建造者模式 & 注解@Builder

    將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離 ,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示。它使將一個(gè)復(fù)雜的對(duì)象分解成多個(gè)簡(jiǎn)單的對(duì)象,然后一步步構(gòu)建而成。 每一個(gè)具體建造者都相對(duì)獨(dú)立,而與其它的具體建造者無關(guān),因此可以很方便地替換具體建造者或增加新的具體建造者,

    2024年02月14日
    瀏覽(19)
  • JAVA設(shè)計(jì)模式第九章:建造者模式

    JAVA設(shè)計(jì)模式第九章:建造者模式

    通過將對(duì)象的構(gòu)建過程從表現(xiàn)層隔離出來,使得相同的構(gòu)建過程可以用來創(chuàng)建不同的表現(xiàn)形式 用于簡(jiǎn)化和優(yōu)化復(fù)雜對(duì)象的創(chuàng)建過程,提高創(chuàng)建效率和代碼可讀性; Product(產(chǎn)品角色): 要?jiǎng)?chuàng)建的產(chǎn)品對(duì)象 Builder(抽象建造者): 創(chuàng)建產(chǎn)品以及部件的接口定義 ConcreateBuilder(具體建造者): 抽

    2024年02月19日
    瀏覽(19)
  • 【Java 設(shè)計(jì)模式】創(chuàng)建型之建造者模式

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

    在軟件開發(fā)中,建造者模式是一種創(chuàng)建型設(shè)計(jì)模式, 它將一個(gè)復(fù)雜對(duì)象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示 。建造者模式通常包括一個(gè)指導(dǎo)者(Director)類和多個(gè)建造者(Builder)類,指導(dǎo)者負(fù)責(zé)組織建造者的構(gòu)建過程,而建造者負(fù)責(zé)具體的構(gòu)建步

    2024年01月21日
    瀏覽(20)
  • 設(shè)計(jì)模式-建造者模式在Java中使用示例

    設(shè)計(jì)模式-建造者模式在Java中使用示例

    復(fù)雜對(duì)象的組裝與創(chuàng)建 沒有人買車會(huì)只買一個(gè)輪胎或者方向盤,大家買的都是一輛包含輪胎、方向盤和發(fā)動(dòng)機(jī)等多個(gè)部件的完整汽車。 如何將這些部件組裝成一輛完整的汽車并返回給用戶,這是建造者模式需要解決的問題。 建造者模式又稱為生成器模式,它是一種較為復(fù)雜

    2024年02月16日
    瀏覽(27)
  • Java設(shè)計(jì)模式之建造者模式詳解(Builder Pattern)

    在日常的開發(fā)工作中,我們常常需要?jiǎng)?chuàng)建一些復(fù)雜的對(duì)象。這些對(duì)象可能包含許多不同的屬性,并且這些屬性的初始化過程可能相當(dāng)復(fù)雜。在這種情況下,建造者模式是一種非常有用的設(shè)計(jì)模式,因?yàn)樗试S我們分步驟地創(chuàng)建復(fù)雜的對(duì)象。 概念和原理: 建造者模式(Builder

    2024年02月09日
    瀏覽(26)
  • Java設(shè)計(jì)模式之創(chuàng)建型-建造者模式(UML類圖+案例分析)

    Java設(shè)計(jì)模式之創(chuàng)建型-建造者模式(UML類圖+案例分析)

    目錄 一、基本概念 二、UML類圖 三、角色設(shè)計(jì)? 四、案例分析 五、總結(jié) 建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它使我們將一個(gè)復(fù)雜對(duì)象的構(gòu)建步驟分離出來,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。該模式的目的是將構(gòu)建復(fù)雜對(duì)象的過程抽象化,從而減少代碼的重復(fù)和復(fù)雜

    2024年02月15日
    瀏覽(25)
  • 【java設(shè)計(jì)模式】創(chuàng)建型模式介紹(工廠模式、抽象工廠模式、單例模式、建造者模式、原型模式)

    簡(jiǎn)介 本文介紹Java設(shè)計(jì)模式中創(chuàng)建型模式的五種 一、工廠模式 工廠模式(Factory Pattern)是 Java 中最常用的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對(duì)象的最佳方式。 工廠模式提供了一種將對(duì)象的實(shí)例化過程封裝在工廠類中的方式。通過使用工

    2024年02月16日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包