国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一起學(xué)設(shè)計(jì)模式 - 建造者模式

MockingBird / 1617人閱讀

摘要:構(gòu)造函數(shù)參數(shù)太多錯(cuò)誤的對(duì)象狀態(tài)使用模式在我們的示例中,改造下召喚師類齊天大圣孫悟空上單基石天賦戰(zhàn)爭(zhēng)雷霆瘟疫之源圖奇下路基石天賦戰(zhàn)陣熱誠皎月女神戴安娜中單建造者模式讓我們寫的代碼更具可讀性,可理解為建立復(fù)雜的物體。

建造者模式(Builder Pattern)屬于創(chuàng)建型模式的一種,將多個(gè)簡(jiǎn)單對(duì)象構(gòu)建成一個(gè)復(fù)雜的對(duì)象,構(gòu)建過程抽象化,不同實(shí)現(xiàn)方法可以構(gòu)造出不同表現(xiàn)(屬性)的對(duì)象,還提供了一種更加優(yōu)雅構(gòu)建對(duì)象的方式...

概述

有時(shí)候構(gòu)建一個(gè)復(fù)雜的對(duì)象,需要經(jīng)過好幾步的處理,比如常用的StringBuffer、StringBuilder、以及Swagger(一種接口文檔),都是以這種模式構(gòu)建對(duì)象的

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

建造者模式比較獨(dú)立,將對(duì)象本身與構(gòu)建過程解耦

精準(zhǔn)控制構(gòu)建出的對(duì)象和內(nèi)容,構(gòu)造層和顯示層是分離的

寫法上更加優(yōu)雅

缺點(diǎn)

范圍受限,不適合差異較大的對(duì)象

內(nèi)部復(fù)雜多變,構(gòu)造類相對(duì)會(huì)多

適用場(chǎng)景

構(gòu)建具有共同特性的復(fù)雜對(duì)象

相關(guān)模式

抽象工廠模式與建造者模式相似,因?yàn)樗部梢詣?chuàng)建復(fù)雜對(duì)象。主要的區(qū)別是建造者模式著重于一步步得構(gòu)造出復(fù)雜對(duì)象。而抽象工廠模式著重于多個(gè)系列的產(chǎn)品對(duì)象(簡(jiǎn)單的或是復(fù)雜的)。建造者是在最后的一步返回對(duì)象,而對(duì)于抽象工廠來說,對(duì)象是立即返回的。

案例

傳統(tǒng)方式

public class Summoner {

    private String name;
    private String type;
    private String innate;

    public Summoner(String name, String type, String innate) {
        this.name = name;
        this.type = type;
        this.innate = innate;
    }
}

簡(jiǎn)單的對(duì)象我們可以使用下面這種方式,因?yàn)閷傩暂^少這種方式還看的,但不幸的是如果要增加字段或我們還需要去擴(kuò)展構(gòu)造方法,且可讀性不好,相同類型的情況下在一定程度上混淆視聽了

Summoner s1 = new Summoner("德瑪","戰(zhàn)士","戰(zhàn)爭(zhēng)雷霆");

為什么不調(diào)用無參數(shù)的構(gòu)造函數(shù),通過setter方法來減輕問題。

解答: 如果程序員忘記調(diào)用一個(gè)特定的setter方法會(huì)發(fā)生什么?我們可能得到的是一個(gè)部分初始化的對(duì)象,而且編譯器也不會(huì)檢測(cè)出任何問題。

構(gòu)造函數(shù)參數(shù)太多

錯(cuò)誤的對(duì)象狀態(tài)

使用模式

在我們的示例中,改造下召喚師類

public class Summoner {

    private String name;
    private String type;
    private String innate;

    private Summoner(Builder builder) {
        this.name = builder.name;
        this.type = builder.type;
        this.innate = builder.innate;
    }

    protected static class Builder {
        private String name;
        private String type;
        private String innate;

        protected Builder name(String name) {
            this.name = name;
            return this;
        }

        protected Builder type(String type) {
            this.type = type;
            return this;
        }

        protected Builder innate(String innate) {
            this.innate = innate;
            return this;
        }
        protected Summoner build() {
            return new Summoner(this);
        }
    }
}

public class BuilderDemo {

    public static void main(String[] args) {
        Summoner monkey = new Summoner.Builder().name("齊天大圣 - 孫悟空").type("上單 - AD").innate("基石天賦 - 戰(zhàn)爭(zhēng)雷霆").build();
        System.out.println(monkey.toString());

        Summoner mouse = new Summoner.Builder().name("瘟疫之源 - 圖奇").type("下路 - ADC").innate("基石天賦 - 戰(zhàn)陣熱誠").build();
        System.out.println(mouse.toString());

        Summoner diann = new Summoner.Builder().name("皎月女神 - 戴安娜").type("中單 - AP").build();
        System.out.println(diann.toString());
    }
}

建造者模式讓我們寫的代碼更具可讀性,可理解為建立復(fù)雜的物體。它往往是實(shí)現(xiàn)一個(gè)連貫的操作,從而更加直觀,此處由于類型較為單一差距不大,但遇到復(fù)雜對(duì)象構(gòu)建差距就立竿見影了

Summoner{name="齊天大圣 - 孫悟空", type="上單 - AD", innate="基石天賦 - 戰(zhàn)爭(zhēng)雷霆"}
Summoner{name="瘟疫之源 - 圖奇", type="下路 - ADC", innate="基石天賦 - 戰(zhàn)陣熱誠"}
Summoner{name="皎月女神 - 戴安娜", type="中單 - AP", innate="null"}
總結(jié)

我們通過一個(gè)簡(jiǎn)單的代碼例子開始,慢慢變得復(fù)雜。然后使用Builder模式來解決我們發(fā)現(xiàn)的問題。

如果你發(fā)現(xiàn)自己在一個(gè)情況下,你不斷添加新參數(shù)的構(gòu)造函數(shù),使得代碼變得容易出錯(cuò),很難讀,也許可以考慮使用一個(gè)Builder重構(gòu)你的代碼。

推薦

lombok: https://github.com/rzwitserloot/lombok

IntelliJ IDEA : InnerBuilder 插件

- 說點(diǎn)什么

全文代碼:https://gitee.com/battcn/design-pattern/tree/master/Chapter4/battcn-builder

個(gè)人QQ:1837307557

battcn開源群(適合新手):391619659

微信公眾號(hào):battcn(歡迎調(diào)戲)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67918.html

相關(guān)文章

  • 《源碼中的設(shè)計(jì)模式》之建造模式——鏈?zhǔn)秸{(diào)用

    摘要:上期原型模式發(fā)布以后,收到了粉絲的感謝,一條創(chuàng)作的動(dòng)力更足了。今天我們一塊看一下建造者模式,同樣是創(chuàng)建型設(shè)計(jì)模式。為我們提供了建造者模式的快速實(shí)現(xiàn),要應(yīng)用到實(shí)際編碼中。 ...

    wind3110991 評(píng)論0 收藏0
  • JS 建造模式

    摘要:如何應(yīng)對(duì)這種變化如何提供一種封裝機(jī)制來隔離出復(fù)雜對(duì)象的各個(gè)部分的變化,從而保持系統(tǒng)中的穩(wěn)定構(gòu)建算法不隨著需求改變而改變這就是要說的建造者模式。建造者模式,將一個(gè)復(fù)雜對(duì)象的構(gòu)建層與其表示層相互分離,使得同樣的構(gòu)建過程可以采用不同的表示。 1. 簡(jiǎn)介 在軟件系統(tǒng)中,有時(shí)候面臨著一個(gè)復(fù)雜對(duì)象的創(chuàng)建工作,其通常由各個(gè)部分的子對(duì)象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對(duì)象的各個(gè)部分經(jīng)常面臨著...

    channg 評(píng)論0 收藏0
  • 設(shè)計(jì)模式建造設(shè)計(jì)模式

    摘要:本質(zhì)建造者設(shè)計(jì)模式分離了對(duì)象子組件的構(gòu)造過程和組裝過程,實(shí)現(xiàn)了構(gòu)建與組裝的解耦,不同的構(gòu)建器相同的組裝順序以及相同的構(gòu)建器不同的組裝順序都可以創(chuàng)建出不同的對(duì)象,使得構(gòu)建與組裝充分解耦,進(jìn)而實(shí)現(xiàn)構(gòu)建算法與組裝算法的解耦,從而實(shí)現(xiàn)更好的復(fù)用。 這是設(shè)計(jì)模式系列的第二篇——建造者設(shè)計(jì)模式,我希望推送的文章是一個(gè)系列的,盡量保持一樣的寫作風(fēng)格,盡量把我理解的闡述清楚,關(guān)于建造者設(shè)計(jì)模式主要從以...

    wangxinarhat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<