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

Gof23設(shè)計(jì)模式之建造者模式

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

1.概述

建造者模式(Builder Pattern)又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對象。

  • 建造者模式是一步一步創(chuàng)建一個(gè)復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,用戶不需要知道內(nèi)部的具體構(gòu)建細(xì)節(jié)。
  • 一個(gè)復(fù)雜的構(gòu)建與其表示(本身)相分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示。現(xiàn)在建造者模式主要用來通過鏈?zhǔn)秸{(diào)用生成不同的配置。

2.結(jié)構(gòu)

建造者(Builder)模式包含如下角色:

  • 抽象建造者類(Builder):這個(gè)接口規(guī)定要實(shí)現(xiàn)復(fù)雜對象的那些部分的創(chuàng)建,并不涉及具體的部件對象的創(chuàng)建。

  • 具體建造者類(ConcreteBuilder):實(shí)現(xiàn) Builder 接口,完成復(fù)雜產(chǎn)品的各個(gè)部件的具體創(chuàng)建方法。在構(gòu)造過程完成后,提供產(chǎn)品的實(shí)例。

  • 產(chǎn)品類(Product):要?jiǎng)?chuàng)建的復(fù)雜對象。

  • 指揮者類(Director):調(diào)用具體建造者來創(chuàng)建復(fù)雜對象的各個(gè)部分,在指導(dǎo)者中不涉及具體產(chǎn)品的信息,只負(fù)責(zé)保證對象各部分完整創(chuàng)建或按某種順序創(chuàng)建。

3.例子

//自行車類
public class Bike {
    private String frame;
    private String seat;

    public String getFrame() {
        return frame;
    }

    public void setFrame(String frame) {
        this.frame = frame;
    }

    public String getSeat() {
        return seat;
    }

    public void setSeat(String seat) {
        this.seat = seat;
    }
}

// 抽象 builder 類
public abstract class Builder {

    protected Bike mBike = new Bike();

    public abstract void buildFrame();
    public abstract void buildSeat();
    public abstract Bike createBike();
}

//摩拜單車Builder類
public class MobikeBuilder extends Builder {

    @Override
    public void buildFrame() {
        mBike.setFrame("鋁合金車架");
    }

    @Override
    public void buildSeat() {
        mBike.setSeat("真皮車座");
    }

    @Override
    public Bike createBike() {
        return mBike;
    }
}

//ofo單車Builder類
public class OfoBuilder extends Builder {

    @Override
    public void buildFrame() {
        mBike.setFrame("碳纖維車架");
    }

    @Override
    public void buildSeat() {
        mBike.setSeat("橡膠車座");
    }

    @Override
    public Bike createBike() {
        return mBike;
    }
}

//指揮者類
public class Director {
    private Builder mBuilder;

    public Director(Builder builder) {
        mBuilder = builder;
    }

    public Bike construct() {
        mBuilder.buildFrame();
        mBuilder.buildSeat();
        return mBuilder.createBike();
    }
}

//測試類
public class Client {
    public static void main(String[] args) {
        showBike(new OfoBuilder());
        showBike(new MobikeBuilder());
    }
    private static void showBike(Builder builder) {
        Director director = new Director(builder);
        Bike bike = director.construct();
        System.out.println(bike.getFrame());
        System.out.println(bike.getSeat());
    }
}

我們也可以將抽象建造者和指揮者類進(jìn)行解和,簡化系統(tǒng)結(jié)構(gòu),但不符合開閉原則。

public abstract class Builder {

    // 聲明Bike類型的變量,并進(jìn)行賦值
    protected Bike bike = new Bike();

    public abstract void buildFrame();

    public abstract void buildSeat();

    // 構(gòu)造自行車方法
    public abstract Bike createBike();

    public Bike construct() {
        this.buildFrame();
        this.buildSeat();
        return this.createBike();
    }
}

4.優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

  • 建造者模式的封裝性很好。使用建造者模式可以有效的封裝變化,在使用建造者模式的場景中,一般產(chǎn)品類和建造者類是比較穩(wěn)定的,因此,將主要的業(yè)務(wù)邏輯封裝在指揮者類中對整體而言可以取得比較好的穩(wěn)定性。
  • 在建造者模式中,客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對象。
  • 可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過程 。將復(fù)雜產(chǎn)品的創(chuàng)建步驟分解在不同的方法中,使得創(chuàng)建過程更加清晰,也更方便使用程序來控制創(chuàng)建過程。
  • 建造者模式很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,基本上不用修改之前已經(jīng)測試通過的代碼,因此也就不會(huì)對原有功能引入風(fēng)險(xiǎn)。符合開閉原則。

缺點(diǎn):

  • 建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點(diǎn),其組成部分相似,如果產(chǎn)品之間的差異性很大,則不適合使用建造者模式,因此其使用范圍受到一定的限制。

5.使用場景

建造者(Builder)模式創(chuàng)建的是復(fù)雜對象,其產(chǎn)品的各個(gè)部分經(jīng)常面臨著劇烈的變化,但將它們組合在一起的算法卻相對穩(wěn)定,所以它通常在以下場合使用。

  • 創(chuàng)建的對象較復(fù)雜,由多個(gè)部件構(gòu)成,各部件面臨著復(fù)雜的變化,但構(gòu)件間的建造順序是穩(wěn)定的。
  • 創(chuàng)建復(fù)雜對象的算法獨(dú)立于該對象的組成部分以及它們的裝配方式,即產(chǎn)品的構(gòu)建過程和最終的表示是獨(dú)立的。

6.擴(kuò)展方法

/**
 * @author 曉風(fēng)殘?jiān)翷x
 * @date 2023/6/26 16:52
 *      手機(jī)類
 */
public class Phone {

    private String cpu;
    private String screen;
    private String memory;
    private String mainboard;

    @Override
    public String toString() {
        return "Phone{" +
                "cpu='" + cpu + '\'' +
                ", screen='" + screen + '\'' +
                ", memory='" + memory + '\'' +
                ", mainboard='" + mainboard + '\'' +
                '}';
    }

    // 私有構(gòu)造方法
    private Phone(Builder builder) {
        this.cpu = builder.cpu;
        this.screen = builder.screen;
        this.memory = builder.memory;
        this.mainboard = builder.mainboard;
    }

    public static final class Builder {
        private String cpu;
        private String screen;
        private String memory;
        private String mainboard;

        public Builder cpu(String cpu) {
            this.cpu = cpu;
            return this;
        }
        public Builder screen(String screen) {
            this.screen = screen;
            return this;
        }
        public Builder memory(String memory) {
            this.memory = memory;
            return this;
        }
        public Builder mainboard(String mainboard) {
            this.mainboard = mainboard;
            return this;
        }

        // 使用構(gòu)建者創(chuàng)建phone對象
        public Phone build() {
            return new Phone(this);
        }

    }
}
/**
 * @author 曉風(fēng)殘?jiān)翷x
 * @date 2023/6/26 16:57
 *      常用的構(gòu)建者用法  可以提高開發(fā)效率
 */
public class Client {
    public static void main(String[] args) {
        // 通過構(gòu)建者對象創(chuàng)建手機(jī)對象
        Phone phone = new Phone.Builder()
                .cpu("intel")
                .screen("三星")
                .memory("金士頓內(nèi)存條")
                .mainboard("華碩")
                .build();

        System.out.println(phone);
    }
}

在lombok的@Builder注解也能實(shí)現(xiàn)建造者模式,簡化開發(fā)。文章來源地址http://www.zghlxwxcb.cn/news/detail-502156.html

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

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

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

相關(guān)文章

  • Gof23設(shè)計(jì)模式之責(zé)任鏈模式

    責(zé)任鏈模式又名職責(zé)鏈模式,為了避免請求發(fā)送者與多個(gè)請求處理者耦合在一起,將所有請求的處理者通過前一對象記住其下一個(gè)對象的引用而連成一條鏈;當(dāng)有請求發(fā)生時(shí),可將請求沿著這條鏈傳遞,直到有對象處理它為止。 職責(zé)鏈模式主要包含以下角色: 抽象處理者(

    2024年02月09日
    瀏覽(25)
  • Gof23設(shè)計(jì)模式之橋接外觀模式

    又名門面模式,是一種通過為多個(gè)復(fù)雜的子系統(tǒng)提供一個(gè)一致的接口,而使這些子系統(tǒng)更加容易被訪問的模式。該模式對外有一個(gè)統(tǒng)一接口,外部應(yīng)用程序不用關(guān)心內(nèi)部子系統(tǒng)的具體的細(xì)節(jié),這樣會(huì)大大降低應(yīng)用程序的復(fù)雜度,提高了程序的可維護(hù)性。 外觀(Facade)模式包含

    2024年02月15日
    瀏覽(22)
  • Gof23設(shè)計(jì)模式之模板方法模式

    定義一個(gè)操作中的算法骨架,而將算法的一些步驟延遲到子類中,使得子類可以不改變該算法結(jié)構(gòu)的情況下重定義該算法的某些特定步驟。 模板方法(Template Method)模式包含以下主要角色: 抽象類(Abstract Class):負(fù)責(zé)給出一個(gè)算法的輪廓和骨架。它由一個(gè)模板方法和若干個(gè)

    2024年02月13日
    瀏覽(20)
  • Gof23設(shè)計(jì)模式之單例模式(完整)

    單例模式(Singleton pattern)是Java中最簡單的設(shè)計(jì)模式之一。這種設(shè)計(jì)模式屬于創(chuàng)建型模型,它提供了一種創(chuàng)建對象的最佳方式。 這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時(shí)確保只有單個(gè)對象被創(chuàng)建。這個(gè)類提供了一種訪問其唯一的對象的方式,可以直接訪

    2024年02月10日
    瀏覽(26)
  • GOF 23 種設(shè)計(jì)模式應(yīng)用場景分析

    本文看下GOF 23 種設(shè)計(jì)模式應(yīng)用場景,詳細(xì)的還是通過文章給出參考鏈接學(xué)習(xí)下。 參考這篇文章 。 有幾種產(chǎn)品需要?jiǎng)?chuàng)建,比如創(chuàng)建紅蘋果,青蘋果,綠蘋果,這些對象通過一個(gè)對象就可以。 參考這篇文章 。 有幾種產(chǎn)品需要?jiǎng)?chuàng)建,但是每種產(chǎn)品不能簡單的通過一個(gè)對象來表示

    2024年02月16日
    瀏覽(28)
  • 創(chuàng)建型模式 (Creational Patterns) 玄子Share 設(shè)計(jì)模式 GOF 全23種 + 七大設(shè)計(jì)原則

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來直接上傳(img-NWLAOFtO-1691793071647)(./assets/%E7%8E%84%E5%AD%90Share%20%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%20GOF%20%E5%85%A823%E7%A7%8D%20+%20%E4%B8%83%E5%A4%A7%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99.png)] GoF(Gang of Four)是四位計(jì)算機(jī)科學(xué)家(Erich Gamma、Ri

    2024年02月12日
    瀏覽(27)
  • 【23種設(shè)計(jì)模式】建造者模式(四)

    【23種設(shè)計(jì)模式】建造者模式(四)

    在軟件系統(tǒng)中,有時(shí)候面臨著“一個(gè)復(fù)雜對象”的創(chuàng)建工作,其通常由各個(gè)部分的子對象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對象的各個(gè)部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。如何應(yīng)對這種變化?如何提供一種“封裝機(jī)制”來隔離

    2024年02月11日
    瀏覽(14)
  • 23種設(shè)計(jì)模式【創(chuàng)建型模式】詳細(xì)介紹之【建造者模式】

    23種設(shè)計(jì)模式【創(chuàng)建型模式】詳細(xì)介紹之【建造者模式】

    可以查看專欄設(shè)計(jì)模式:設(shè)計(jì)模式 建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,用于構(gòu)建復(fù)雜對象。它將對象的構(gòu)建過程與其表示分離,允許您以可控和可擴(kuò)展的方式構(gòu)建對象。在本文中,我們將深入探討建造者模式,解釋其核心概念,并提供Java示例代碼來演示如何使用建造者模式

    2024年02月08日
    瀏覽(21)
  • 用Rust實(shí)現(xiàn)23種設(shè)計(jì)模式之建造者模式

    當(dāng)使用 Rust 實(shí)現(xiàn)建造者模式時(shí),我們可以通過結(jié)構(gòu)體和方法鏈來實(shí)現(xiàn)。建造者模式是一種創(chuàng)建型設(shè)計(jì)模式,它允許你按照特定的順序構(gòu)建復(fù)雜對象,同時(shí)使你能夠靈活地構(gòu)建不同的變體。下面是一個(gè)使用 Rust 實(shí)現(xiàn)建造者模式的示例, 在示例中,我們首先定義了要構(gòu)建的復(fù)雜對

    2024年02月14日
    瀏覽(25)
  • 【設(shè)計(jì)模式】23種設(shè)計(jì)模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式】23種設(shè)計(jì)模式——建造者模式Builder(原理講解+應(yīng)用場景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    建造者模式又叫生成器模式,是一種對象構(gòu)建模式。它可以將復(fù)雜對象的建造過程抽象出來(抽象類別),使這個(gè)抽象過程的不同實(shí)現(xiàn)方法可以構(gòu)造出不同屬性的對象 建造者模式是一步一步創(chuàng)建一個(gè)復(fù)雜的對象,它允許用戶只通過指定復(fù)雜對象的類型和內(nèi)容就可以構(gòu)建它們,不

    2024年02月16日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包