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

【設(shè)計模式】builder 創(chuàng)建者設(shè)計模式詳解(包含電商應(yīng)用場景及代碼示例)

這篇具有很好參考價值的文章主要介紹了【設(shè)計模式】builder 創(chuàng)建者設(shè)計模式詳解(包含電商應(yīng)用場景及代碼示例)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、builder 簡介

在常見的設(shè)計模式中,“Builder” 通常是指一種設(shè)計模式,而不是具體的類或方法。Builder 模式是一種創(chuàng)建型設(shè)計模式,其目的是通過提供一個獨立的構(gòu)建器類來構(gòu)建一個復(fù)雜對象。

建造者模式(Builder Pattern) 是一種創(chuàng)建型設(shè)計模式,它的主要目標(biāo)是為了將一個復(fù)雜對象的構(gòu)建與其表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。

1、主要角色

  • 產(chǎn)品(Product):表示被構(gòu)建的復(fù)雜對象。在建造過程完成后,該對象通常包含多個部件。
  • 抽象建造者(Builder):聲明了創(chuàng)建產(chǎn)品各個部件的抽象接口。通常包含創(chuàng)建和返回產(chǎn)品的方法。
  • 具體建造者(Concrete Builder):實現(xiàn)了抽象建造者接口,負(fù)責(zé)實際構(gòu)建產(chǎn)品的各個部件。具體建造者通常會有一個與產(chǎn)品相關(guān)的成員變量,用于保存當(dāng)前產(chǎn)品的狀態(tài)。
  • 指導(dǎo)者(Director):負(fù)責(zé)使用建造者對象構(gòu)建產(chǎn)品。指導(dǎo)者通常不知道具體產(chǎn)品的類型和內(nèi)部結(jié)構(gòu),僅僅負(fù)責(zé)按照一定的構(gòu)建步驟調(diào)用建造者的方法。

在 Java 中,Builder 模式通常由一個包含所有構(gòu)建步驟的內(nèi)部靜態(tài)類(稱為 Builder 類)來實現(xiàn)。這個 Builder 類負(fù)責(zé)設(shè)置對象的各個屬性,最后通過一個 build() 方法來構(gòu)建目標(biāo)對象。

總體而言,Builder 模式是通過一個獨立的構(gòu)建器類來創(chuàng)建對象,使得對象的構(gòu)建過程更加靈活和清晰。

二、builder 用法及實現(xiàn)

1、手寫builder類

一般來說,builder 的用法如下:

  • 創(chuàng)建一個靜態(tài)內(nèi)部類作為建造者(Builder):

        private String property1;
        private int property2;
    
        // 私有構(gòu)造函數(shù),限制直接實例化
        private MyClass() {
        }
    
        // Getter 方法省略...
    
        // 靜態(tài)內(nèi)部類作為建造者
        public static class Builder {
            private MyClass instance = new MyClass();
    
            public Builder withProperty1(String value) {
                instance.property1 = value;
                return this;
            }
    
            public Builder withProperty2(int value) {
                instance.property2 = value;
                return this;
            }
    
            public MyClass build() {
                return instance;
            }
        }
    
        // 其他靜態(tài)工廠方法或?qū)嵗椒?..
    
        // 示例:使用 builder() 創(chuàng)建對象
        public static Builder builder() {
            return new Builder();
        }
     } 
    
  • 使用建造者設(shè)置屬性:

    MyClass myObject = MyClass.builder()
        .withProperty1("value1")
        .withProperty2(42)
        .build(); 
    

通過這種方式,你可以在創(chuàng)建對象的時候逐步設(shè)置屬性,而不是通過構(gòu)造函數(shù)傳遞參數(shù)。這樣的設(shè)計使得代碼更加清晰,易于維護(hù),尤其當(dāng)有多個可選屬性時,建造者模式可以提供更好的靈活性。

2、Lombok實現(xiàn)

使用 Lombok 這樣的工具,它提供了 @Builder 注解,該注解可以用于生成 Builder 模式相關(guān)的代碼。下面是一個使用 Lombok 的 @Builder 注解的簡單示例:詳情參考【注解】@Builder、@SuperBuilder Lombok 中的建設(shè)者

import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class Example {
    private final String name;
    private final int age;
}
// 在其他類中使用
Example example = Example.builder()
        .name("John")
        .age(25)
        .build();

在這個示例中,Builder 注解幫助生成了一個名為 builder 的靜態(tài)內(nèi)部類,該類用于創(chuàng)建 Example 對象的實例。這種方式使得對象的創(chuàng)建更加清晰和方便。

請注意,@Builder 是 Lombok 提供的功能,如果你沒有使用 Lombok,你需要手動編寫 Builder 模式的代碼。

三、作用和優(yōu)勢

1、工作流程

  • 客戶端(Client):創(chuàng)建指導(dǎo)者對象,并指定一個具體的建造者對象。
  • 指導(dǎo)者(Director):調(diào)用具體建造者的一系列方法,按照一定的步驟來構(gòu)建產(chǎn)品。
  • 具體建造者(Concrete Builder):實現(xiàn)了具體的構(gòu)建步驟,負(fù)責(zé)構(gòu)建產(chǎn)品的各個部件。
  • 產(chǎn)品(Product):表示最終構(gòu)建成功的對象。

2、優(yōu)點

  • 分離構(gòu)建和表示:建造者模式將對象的構(gòu)建和最終表示分離,使得相同的構(gòu)建過程可以創(chuàng)建不同的表示。
  • 更好的控制構(gòu)建過程:通過指導(dǎo)者來控制構(gòu)建過程,可以靈活地配置和改變產(chǎn)品的構(gòu)建流程。
  • 更好的復(fù)用性:可以通過不同的具體建造者來創(chuàng)建不同類型的產(chǎn)品,提高了代碼的復(fù)用性。
  • 更好的擴(kuò)展性:增加新的具體建造者無需修改指導(dǎo)者的代碼,符合開閉原則。

四、應(yīng)用場景

  • 需要創(chuàng)建復(fù)雜對象:當(dāng)對象的構(gòu)建過程較為復(fù)雜,涉及多個部件組合,且這些部件可能存在多種組合方式時,可以考慮使用建造者模式。
  • 對象的構(gòu)建步驟順序不固定:如果對象的構(gòu)建步驟的順序不固定,或者某些步驟可以省略,可以通過建造者模式更靈活地構(gòu)建對象。
  • 想要避免使用過多的構(gòu)造方法:在類的構(gòu)造方法中,參數(shù)的組合可能有多種情況,如果為每一種情況都提供一個構(gòu)造方法,會導(dǎo)致構(gòu)造方法的數(shù)量急劇增加。建造者模式可以通過一系列的方法來設(shè)置對象的不同部分,避免構(gòu)造方法的爆炸性增長。
  • 希望在創(chuàng)建對象時能夠更好地控制對象的構(gòu)建過程:通過使用指導(dǎo)者(Director)來封裝對象的構(gòu)建過程,客戶端只需要指定具體的建造者和調(diào)用指導(dǎo)者的構(gòu)建方法,而無需關(guān)心對象的具體構(gòu)建過程。
  • 想要避免在客戶端暴露產(chǎn)品的內(nèi)部表示:建造者模式將產(chǎn)品的構(gòu)建和最終表示分離,客戶端只需要關(guān)心產(chǎn)品的最終狀態(tài)而不需要知道具體的構(gòu)建細(xì)節(jié),從而降低了客戶端與產(chǎn)品的耦合度。

總的來說,建造者模式適用于需要創(chuàng)建復(fù)雜對象,且構(gòu)建過程靈活多變的場景。在這種模式下,將對象的構(gòu)建過程封裝在具體建造者中,通過指導(dǎo)者來統(tǒng)一調(diào)度,使得客戶端可以更方便地構(gòu)建出所需的對象。

五、應(yīng)用實例(電商)

在電商項目中,一個典型的場景是創(chuàng)建訂單(Order)。訂單通常包含多個部分,例如訂單項、收貨地址、支付信息等,而每個部分的構(gòu)建可能涉及到多個步驟和參數(shù)。建造者模式在這種情況下可以很好地應(yīng)用。

讓我們考慮一個簡化的訂單創(chuàng)建過程,使用建造者模式來構(gòu)建訂單對象。假設(shè)訂單包括訂單號、訂單項列表、收貨地址、支付信息等。

1、首先,定義訂單對象:

// 訂單對象
public class Order {
    private String orderNumber;
    private List<OrderItem> orderItems;
    private String shippingAddress;
    private String paymentInfo;

    // 構(gòu)造方法私有化,通過建造者來構(gòu)建對象
    private Order() {
    }

    // 提供獲取訂單信息的方法
    // ...
}

2、然后,定義訂單項對象:

// 訂單項對象
public class OrderItem {
    private String productCode;
    private int quantity;

    // 構(gòu)造方法
    public OrderItem(String productCode, int quantity) {
        this.productCode = productCode;
        this.quantity = quantity;
    }

    // 提供獲取訂單項信息的方法
    // ...
}

3、接下來,定義訂單的建造者(OrderBuilder):

// 訂單建造者
public class OrderBuilder {
    private Order order;

    public OrderBuilder() {
        this.order = new Order();
    }

    public OrderBuilder setOrderNumber(String orderNumber) {
        order.orderNumber = orderNumber;
        return this;
    }

    public OrderBuilder addOrderItem(String productCode, int quantity) {
        if (order.orderItems == null) {
            order.orderItems = new ArrayList<>();
        }
        order.orderItems.add(new OrderItem(productCode, quantity));
        return this;
    }

    public OrderBuilder setShippingAddress(String shippingAddress) {
        order.shippingAddress = shippingAddress;
        return this;
    }

    public OrderBuilder setPaymentInfo(String paymentInfo) {
        order.paymentInfo = paymentInfo;
        return this;
    }

    public Order build() {
        return order;
    }
}

4、最后,在客戶端中使用建造者模式來構(gòu)建訂單:

public class Main {
    public static void main(String[] args) {
        // 使用建造者構(gòu)建訂單
        Order order = new OrderBuilder()
                .setOrderNumber("123456")
                .addOrderItem("P001", 2)
                .addOrderItem("P002", 1)
                .setShippingAddress("123 Main St, City")
                .setPaymentInfo("Credit Card")
                .build();

        // 打印訂單信息
        System.out.println("Order Number: " + order.getOrderNumber());
        System.out.println("Shipping Address: " + order.getShippingAddress());
        System.out.println("Payment Info: " + order.getPaymentInfo());
        System.out.println("Order Items: " + order.getOrderItems());
    }
}

在這個例子中,通過使用建造者模式,客戶端可以按照自己的需求逐步設(shè)置訂單的各個部分,最后調(diào)用 build() 方法生成訂單對象。這種方式既靈活又可讀性好,而且使得訂單對象的創(chuàng)建過程與客戶端解耦。文章來源地址http://www.zghlxwxcb.cn/news/detail-812342.html

到了這里,關(guān)于【設(shè)計模式】builder 創(chuàng)建者設(shè)計模式詳解(包含電商應(yīng)用場景及代碼示例)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 24種設(shè)計模式之創(chuàng)建者模式-Java版

    24種設(shè)計模式之創(chuàng)建者模式-Java版

    軟件設(shè)計模式是前輩們代碼設(shè)計經(jīng)驗的總結(jié),可以反復(fù)使用。設(shè)計模式共分為3大類,創(chuàng)建者模式(6種)、結(jié)構(gòu)型模式(7種)、行為型模式(11種),一共24種設(shè)計模式,軟件設(shè)計一般需要滿足7大基本原則。下面通過5章的學(xué)習(xí)一起來看看設(shè)計模式的魅力吧。 創(chuàng)建型模式(6種):本質(zhì)上就

    2024年01月22日
    瀏覽(24)
  • 【創(chuàng)建者模式】工廠模式

    【創(chuàng)建者模式】工廠模式

    根據(jù)百科的定義,工廠模式是“工廠是用于創(chuàng)建其他對象的對象”。 以咖啡店為例,設(shè)計一個咖啡類Coffee,并定義其兩個子類(美式咖啡AmericanCoffee和拿鐵咖啡LatteCoffee);再設(shè)計一個咖啡店類CoffeeStore,咖啡店具有點咖啡的功能。 在上面的示例中,我們沒有使用任何模式并

    2023年04月11日
    瀏覽(23)
  • (一)創(chuàng)建型設(shè)計模式:3、建造者模式(Builder Pattern)

    (一)創(chuàng)建型設(shè)計模式:3、建造者模式(Builder Pattern)

    目錄 1、建造者模式含義 2、建造者模式的講解 3、使用C++實現(xiàn)建造者模式的實例 4、建造者模式的優(yōu)缺點 5、建造者模式VS工廠模式 1、建造者模式含義 The intent of the Builder design pattern is to separate the construction of a complex object from its representation. By doing so the same construction process ca

    2024年02月13日
    瀏覽(16)
  • 設(shè)計模式-構(gòu)建者(Builder)模式詳解

    在創(chuàng)建一個對象的時候,你是否是醬紫寫: 上面的寫法雖然效率高,但也有一些不足,對于代碼后期維護(hù)和協(xié)同開發(fā)會是一件很痛苦的事情。 再看看別人是醬紫寫的: ?是不是很優(yōu)雅,而且在很多框架中也能看到這樣寫的身影。沒錯這就是接下來要講的構(gòu)建者模式,這樣好處

    2024年02月11日
    瀏覽(21)
  • 【新手上路】如何在Web3時代成為XR創(chuàng)建者

    【新手上路】如何在Web3時代成為XR創(chuàng)建者

    目錄 0 XR在Web3里的作用 1 XR的概念、特征、技術(shù)、設(shè)備、平臺、應(yīng)用和工具 1.1 VR的概念、特征和技術(shù) 1.2 AR的概念、特征和技術(shù) 1.2 XR的設(shè)備、平臺、應(yīng)用和工具 2 選擇XR的方法 2.1 何時使用VR 2.2 何時使用AR 3 開發(fā)XR作品的4個步驟 4 成為XR構(gòu)建者的路徑 4.1 三種開發(fā)XR作品的方式

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

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

    2024年02月09日
    瀏覽(26)
  • 設(shè)計模式——建造者模式(Builder Pattern)

    設(shè)計模式——建造者模式(Builder Pattern)

    概述 ?????? 建造者模式是較為復(fù)雜的創(chuàng)建型模式,它將客戶端與包含多個組成部分(或部件)的復(fù)雜對象的創(chuàng)建過程分離,客戶端無須知道復(fù)雜對象的內(nèi)部組成部分與裝配方式,只需要知道所需建造者的類型即可。它關(guān)注如何一步一步創(chuàng)建一個的復(fù)雜對象,不同的具體建

    2024年01月20日
    瀏覽(22)
  • 設(shè)計模式--建造者模式(Builder Pattern)

    設(shè)計模式--建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計模式,它關(guān)注如何按照一定的步驟和規(guī)則創(chuàng)建復(fù)雜對象。建造者模式的主要目的是將一個復(fù)雜對象的構(gòu)建過程與其表示分離,從而使同樣的構(gòu)建過程可以創(chuàng)建不同的表示。 在建造者模式中,通常有以下幾個核心角色: 產(chǎn)品(Prod

    2024年02月11日
    瀏覽(18)
  • 設(shè)計模式|建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計模式,用于將一個復(fù)雜對象的構(gòu)建過程與其表示分離,以便可以使用相同的構(gòu)建過程創(chuàng)建不同的表示。 Builder(建造者)接口或抽象類 : 定義了構(gòu)建對象的各個步驟的方法。 ConcreteBuilder(具體建造者)類 : 實現(xiàn)了 Builder 接口或繼

    2024年04月15日
    瀏覽(40)
  • 設(shè)計模式五:建造者模式(Builder Pattern)

    建造者模式(Builder Pattern)是一種創(chuàng)建型設(shè)計模式,用于通過一系列步驟來構(gòu)建復(fù)雜對象。它將對象的構(gòu)建過程與其表示分離,從而允許相同的構(gòu)建過程可以創(chuàng)建不同的表示。 建造者模式中的幾個角色: 產(chǎn)品(Product):表示被構(gòu)建的復(fù)雜對象。 抽象建造者(Builder):定義了構(gòu)建復(fù)

    2024年02月15日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包