欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

折騰Java設(shè)計模式之建造者模式-創(chuàng)新互聯(lián)

博文原址:折騰Java設(shè)計模式之建造者模式

揭陽ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!

建造者模式

Separate the construction of a complex object from its representation, allowing the same construction process to create various representations.

將復(fù)雜對象的構(gòu)造與其表現(xiàn)分離,允許相同的構(gòu)造過程用來創(chuàng)建不同的表現(xiàn)。通俗點就是,一個對象創(chuàng)建過程很復(fù)雜,我們將其每項元素創(chuàng)建過程抽離出來,通過相同的構(gòu)造過程可以構(gòu)造出不用的對象。還不懂可以看到如下的UML圖。

建造者模式UML圖

AbstractPersonBuilder就是如上的相同的構(gòu)造,而不同的表現(xiàn)就是此處的PersonOneBuilderPersonTwoBuilder兩個相同方式的構(gòu)造器,但是具體的實現(xiàn)是不一樣而構(gòu)造出不同的表現(xiàn)。所以就是相同的構(gòu)造過程而構(gòu)造出不同的對象。

建造者模式角色

抽象建造者(AbstractPersonBuilder或者Builder):抽象類或者接口,復(fù)雜對象的屬性的抽象方法,并不涉及具體的對象部件的創(chuàng)建;

具體建造者(PersonOneBuilderPersonTwoBuilder):實現(xiàn)抽象建造者,針對不同的業(yè)務(wù),具體化復(fù)雜對象的各部分的創(chuàng)建。 在建造過程完成后,提供產(chǎn)品的實例;

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

具體的產(chǎn)品(Person):需創(chuàng)建的復(fù)雜對象;

建造者模式源碼干貨

源碼地址:請點擊我

在這里我分為三種情況講講建造者模式,第一種是我們最原始的建造者模式來構(gòu)建,第二種是我們在實體對象時會使用的,第三種是我們平常對實體對象最常規(guī)使用方法借助lombok。

第一種建造者模式

使用的真是上面按照角色來建造的方式,稍微比如下的兩種方法負(fù)責(zé)點。

抽象建造者

public abstract class AbstractPersonBuilder {

    protected Person product = new Person();

    public abstract void buildName();

    public abstract void buildAge();

    public abstract void buildChildren();

    public Person build() {

        return product;
    }
}

第一個具體建造者

public class PersonOneBuilder extends AbstractPersonBuilder {

    public void buildName() {
        product.setName("老one");
    }

    public void buildAge() {
        product.setAge(44);
    }

    public void buildChildren() {
        product.setChildren(Lists.newArrayList("小one"));
    }

}

第二個具體建造者

public class PersonTwoBuilder extends AbstractPersonBuilder {

    public void buildName() {
        product.setName("老two");
    }

    public void buildAge() {
        product.setAge(55);
    }

    public void buildChildren() {
        product.setChildren(Lists.newArrayList("小two"));
    }

}

Person類充當(dāng)產(chǎn)品數(shù)據(jù)

public class Person {

    private String name;

    private int age;

    private List<String> children;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", children=" + children +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<String> getChildren() {
        return children;
    }

    public void setChildren(List<String> children) {
        this.children = children;
    }
}

指揮者,指定具體的建造者用來建造對象

public class Director {

    private AbstractPersonBuilder builder;

    public Director(AbstractPersonBuilder builder) {
        this.builder = builder;
    }

    public void setBuilder(AbstractPersonBuilder builder) {
        this.builder = builder;
    }

    public Person construct() {
        builder.buildName();
        builder.buildAge();
        builder.buildChildren();
        return builder.build();
    }
}

示例

@Slf4j
public class Application {

    public static void main(String[] args) {
        Director director = new Director(new PersonOneBuilder());
        Person person = director.construct();
        log.info("person的信息:{}", person);

        director.setBuilder(new PersonTwoBuilder());
        person = director.construct();
        log.info("person的信息:{}", person);
    }
}

結(jié)果:

折騰Java設(shè)計模式之建造者模式

第二種建造者模式

第二種方式比上面那種簡單些,因為我們只指定了一種構(gòu)造方式,并且還可以借用第三方工具IDEA+Plugins。

在IDEA中可以搜索

折騰Java設(shè)計模式之建造者模式

使用方法:

1.找到對應(yīng)需要添加bulid的類通過自動生成快捷鍵可以查看到build

折騰Java設(shè)計模式之建造者模式

2.根據(jù)自己的風(fēng)格可以定義bulid的名字,各個bulid方法的前綴以及包名,具體bulider如下代碼中。

折騰Java設(shè)計模式之建造者模式

PersonBuilder用來Person的構(gòu)建者

public final class PersonBuilder {
    private String name;
    private int age;
    private List<String> children;

    private PersonBuilder() {
    }

    public static PersonBuilder builder() {
        return new PersonBuilder();
    }

    public PersonBuilder withName(String name) {
        this.name = name;
        return this;
    }

    public PersonBuilder withAge(int age) {
        this.age = age;
        return this;
    }

    public PersonBuilder withChildren(List<String> children) {
        this.children = children;
        return this;
    }

    public Person build() {
        Person person = new Person();
        person.setName(name);
        person.setAge(age);
        person.setChildren(children);
        return person;
    }
}

Person類充當(dāng)產(chǎn)品數(shù)據(jù)

public class Person {

    private String name;

    private int age;

    private List<String> children;

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", children=" + children +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List<String> getChildren() {
        return children;
    }

    public void setChildren(List<String> children) {
        this.children = children;
    }
}

示例

@Slf4j
public class Application {

    public static void main(String[] args) {
        Person wang = PersonBuilder.builder()
                .withAge(40)
                .withName("老王")
                .withChildren(Lists.newArrayList("李一一", "吳老三"))
                .build();
        log.info("老王的信息:{}", wang);
    }
}

結(jié)果如下:

折騰Java設(shè)計模式之建造者模式

第三種建造者模式

第三種模式相對來說就簡單非常多,因為我們借用的是lombok的@Builder注解。lombok在18.2版本中引入了@SuperBulider注解用來解決@Builder類的繼承不生效的問題。詳細(xì)的使用闊以看我上篇文章 折騰Java設(shè)計模式之模板方法模式

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {

    private String name;

    private int age;

    private List<String> children;

}
@Slf4j
public class Application {

    public static void main(String[] args) {
        Person wang = Person.builder()
                .age(40)
                .name("老王")
                .children(Lists.newArrayList("李一一", "吳老三"))
                .build();
        log.info("老王的信息:{}", wang);
    }
}

結(jié)果:

折騰Java設(shè)計模式之建造者模式

總結(jié)

第二、三種模式在我們經(jīng)常操作像對VO、DO、DTO對象時,常用如此定義。第一種標(biāo)準(zhǔn)的建造者模式,其實本身指揮者這個角色是不關(guān)心具體的產(chǎn)品實現(xiàn)的,相對于是一種解耦,對于如果新增一種建造者實現(xiàn),可以方便擴(kuò)展,符合開閉原則,但是無獨有偶,實現(xiàn)了上述優(yōu)點后,但是缺點也跟著來,新增了很多類,維護(hù)成本高,如果建造者內(nèi)部發(fā)生變更,就不太適合建造者這種模式了??傮w而言還是有很多使用場景的。像StringBulider其實也是一種。像之前在spring-boot的spring-cache中的擴(kuò)展redis緩存的ttl和key名這篇文章中定義的RedisCacheManagerBuilder,以及我們常用的以后要講的Feign的Builder等等。

歡迎關(guān)注

折騰Java設(shè)計模式之建造者模式

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:折騰Java設(shè)計模式之建造者模式-創(chuàng)新互聯(lián)
文章出自:http://aaarwkj.com/article26/ddoccg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作網(wǎng)站維護(hù)、網(wǎng)站營銷小程序開發(fā)、建站公司、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作
国产精品大屁股一区二区| 欧美日韩精品视频专区| 亚洲精品日韩在线欧美| 婷婷丁香六月激情综合| 国内精品av在线观看| 国模在线视频一区二区| 97在线视频观看视频在线| 韩国理伦三级做爰观看| 美女高潮久久久777| 91香蕉国产精品日韩| 中文字幕乱码亚洲精品一区| 加藤桃香中文字幕在线| 91精彩啦在线看国产| 国产精品99久久久久久人| 伊人久久九九精品综合| 亚洲成av人片又粗又长| 男人av天堂手机在线| 欧美激情一区二区三区蜜桃| 国产精品深夜在线观看| 水牛av影视亚洲精品| 日本午夜专区一区二区| 久久久之久亚州精品露出| 未满18十八禁止观看| 亚洲日本精品免费在线观看| 黄片无毛欧美在线观看| 日韩欧美中文字幕综合网| 亚州欧美制服另类国产| 国产精品毛片一区内射| 啪啪视频日韩一区二区| 中文字幕亚洲欧美日韩高清| 一不卡二不卡三不卡日本影院| 亚洲精品一区av在线观看| 国产91白丝在线观看| 国产在线精品91系列| 变态另类欧美国产在线| 亚洲av日韩专区在线观看| 成人一区二区三区播放| 青青草免费视频观看在线| 久久精品欧美日韩视频| 日本高清不卡在线观看| 国产欧美一区二区三区高清|