成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

我的Java設(shè)計(jì)模式-建造者模式

elisa.yang / 3427人閱讀

摘要:汽車(chē)本身就是復(fù)雜產(chǎn)品對(duì)象,其制造過(guò)程可以形象的表示建造者模式。另一輛法拉利,。法拉利具體建造者代碼如下構(gòu)造法拉利的第一部分。咻咻法拉利已造好三建造者模式的優(yōu)缺點(diǎn)優(yōu)點(diǎn)降低代碼耦合度。

在未上大學(xué)之前,一直有個(gè)夢(mèng)想“I have a dream!”,就是能成為一位汽車(chē)工程師,一直幻想著開(kāi)著自己設(shè)計(jì)的汽車(chē)飛奔在公路上,迷倒了萬(wàn)千少女??瓤葉~雖然現(xiàn)在沒(méi)實(shí)現(xiàn)我的dream,但夢(mèng)想還是得有的。

說(shuō)到建造者模式,汽車(chē)絕對(duì)是典型的列子。汽車(chē)本身就是復(fù)雜產(chǎn)品對(duì)象,其制造過(guò)程可以形象的表示建造者模式。

一、建造者模式 定義

??將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。

特點(diǎn)

??1.在某些屬性沒(méi)有賦值之前,復(fù)雜對(duì)象不能作為一個(gè)完整的產(chǎn)品使用。比如汽車(chē)包括方向盤(pán)、車(chē)門(mén)、發(fā)動(dòng)機(jī)等各部件,缺少了這些部件就不能生產(chǎn)使用。

??2.對(duì)象的一些屬性必須按照順序賦值,比如汽車(chē)應(yīng)有車(chē)架才能裝車(chē)輪和其他部件。

UML

從上面的UML可以看出,建造者模式涉及到以下四個(gè)角色的概念:

??- 抽象建造者角色:提供一個(gè)接口,規(guī)范產(chǎn)品對(duì)象的建造,一般由子類(lèi)實(shí)現(xiàn)。一般來(lái)說(shuō),產(chǎn)品的組成部分?jǐn)?shù)與建造方法數(shù)相同,即有多少組成部分,就有多少個(gè)建造方法。

??- 具體建造者角色:該角色實(shí)現(xiàn)了抽象建造者抽象建造者接口,主要是實(shí)現(xiàn)所有聲明的方法以及返回建造好的產(chǎn)品實(shí)例。

??- 導(dǎo)演者角色:負(fù)責(zé)調(diào)用具體建造者按照順序建造產(chǎn)品。導(dǎo)演者只負(fù)責(zé)調(diào)度,真正執(zhí)行的是具體建造者角色。

??- 產(chǎn)品角色:該角色是建造的復(fù)雜對(duì)象,提供基本方法。

二、實(shí)戰(zhàn) 上代碼

現(xiàn)在要做兩輛萬(wàn)眾矚目的豪車(chē),一輛蘭博基尼,fine。另一輛法拉利,ok。一起來(lái)看看怎么造這兩臺(tái)車(chē)...

產(chǎn)品角色代碼如下:

public class Production {

    private String part1;
    private String part2;

    public String getPart1() {
        return part1;
    }

    public void setPart1(String part1) {
        this.part1 = part1;
    }

    public String getPart2() {
        return part2;
    }

    public void setPart2(String part2) {
        this.part2 = part2;
    }
}

抽象建造者角色代碼如下:

public interface IBuilder {

    // 產(chǎn)品有多少個(gè)組件,就有多少個(gè)建造方法

    public void buildPart1();

    public void buildPart2();

    // 返回產(chǎn)品類(lèi) 
    public Production build();

}

首先來(lái)看蘭博基尼怎么做,代碼如下:

public class BuilderA implements IBuilder {

    private Production production = new Production();

    @Override
    public void buildPart1() {
        System.out.println("構(gòu)造蘭博基尼的第一部分。");
        production.setPart1("This is part1 of Lamborghini");
    }

    @Override
    public void buildPart2() {
        System.out.println("構(gòu)造蘭博基尼的第二部分。");
        production.setPart2("This is part2 of Lamborghini");
    }

    @Override
    public Production build() {
        System.out.println("咔擦!蘭博基尼已造好!");
        return production;
    }
}

導(dǎo)演者角色調(diào)度構(gòu)建,代碼如下:

public class Director {

    private IBuilder builder;

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

    /**
     * 構(gòu)造順序
     */
    public Production construct(){
        builder.buildPart1();
        builder.buildPart2();

        return builder.build();
    }

}

下面看看客戶(hù)端如何使用建造者模式把蘭博基尼造出來(lái),代碼如下:

public class Client {

    public static void main(String[] args){

        // 蘭博基尼
        IBuilder builderA = new BuilderA();
        Director directorA = new Director(builderA);
        directorA.construct();

    }

}

運(yùn)行客戶(hù)端代碼,結(jié)果如下:

構(gòu)造蘭博基尼的第一部分。

構(gòu)造蘭博基尼的第二部分。

咔擦!蘭博基尼已造好!

接下來(lái)要造法拉利了,步驟一樣,先實(shí)現(xiàn)抽象建造者接口。

法拉利具體建造者代碼如下:

public class BuilderB implements IBuilder {

    private Production production = new Production();

    @Override
    public void buildPart1() {
        System.out.println("構(gòu)造法拉利的第一部分。");
        production.setPart1("This is part1 of Ferrari");
    }

    @Override
    public void buildPart2() {
        System.out.println("構(gòu)造法拉利的第二部分。");
        production.setPart2("This is part2 of Ferrari");
    }

    @Override
    public Production build() {
        return production;
    }
}

客戶(hù)端建造法拉利代碼如下:

public class Client {

    public static void main(String[] args) {
    
        // 法拉利
        IBuilder builderB = new BuilderB();
        Director directorB = new Director(builderB);
        directorB.construct();
    }

}

客戶(hù)端運(yùn)行結(jié)果如下:

構(gòu)造法拉利的第一部分。

構(gòu)造法拉利的第二部分。

咻咻!法拉利已造好!

三、建造者模式的優(yōu)缺點(diǎn) 優(yōu)點(diǎn)

1)降低代碼耦合度。在建造者模式中,客戶(hù)端不需要知道產(chǎn)品內(nèi)部是如何實(shí)現(xiàn)的,我們只需得到產(chǎn)品的對(duì)象。并且使用導(dǎo)演者和建造者分離組裝過(guò)程和組件具體構(gòu)造過(guò)程,具有靈活的擴(kuò)展性。

2)優(yōu)秀的擴(kuò)展性。具體建造者相互獨(dú)立,方便擴(kuò)展,符合開(kāi)閉原則。

缺點(diǎn)

1)一定的使用范圍限制。建造者模式的產(chǎn)品的組件基本相同,如果產(chǎn)品的差異性較大,建造者模式就不適用了。

四、比較

跟工廠方法模式對(duì)比:建造者模式和工廠模式同樣是創(chuàng)建一個(gè)產(chǎn)品,工廠模式就是一個(gè)方法,而建造者模式有多個(gè)方法,并且建造者模式是有順序的執(zhí)行方法。就是說(shuō)建造者模式強(qiáng)調(diào)的是順序,而工廠模式?jīng)]有順序一說(shuō)。

總結(jié)

好了,蘭博基尼和法拉利的都擁有了,體驗(yàn)了一會(huì)人生贏家的感覺(jué)。上一篇工廠方法模式跟建造者模式還是蠻相似的,有興趣可以翻看,斟酌兩種模式的不同之處,這個(gè)方式對(duì)學(xué)習(xí)設(shè)計(jì)模式幫助巨大。下一篇觀察者模式,敬請(qǐng)關(guān)注!

設(shè)計(jì)模式Java源碼GitHub下載https://github.com/jetLee92/DesignPattern

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

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

相關(guān)文章

  • 深入理解建造模式 ——組裝復(fù)雜的實(shí)例

    摘要:而建造者模式則是要求按照指定的藍(lán)圖建造產(chǎn)品,它的主要目的是通過(guò)組裝零配件而產(chǎn)生一個(gè)新產(chǎn)品。最后通過(guò)一個(gè)套餐實(shí)例,介紹了建造者模式在實(shí)例中的基本使用手段。 歷史文章回顧: 設(shè)計(jì)模式專(zhuān)欄 深入理解單例模式 深入理解工廠模式 歷史優(yōu)質(zhì)文章推薦: 分布式系統(tǒng)的經(jīng)典基礎(chǔ)理論 可能是最漂亮的Spring事務(wù)管理詳解 面試中關(guān)于Java虛擬機(jī)(jvm)的問(wèn)題看這篇就夠了 無(wú)論是在現(xiàn)實(shí)世界中還是在軟件...

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

    摘要:建造者實(shí)現(xiàn)抽象類(lèi)的所有未實(shí)現(xiàn)的方法,具體來(lái)說(shuō)一般是兩項(xiàng)任務(wù)組建產(chǎn)品返回組建好的產(chǎn)品。 0x01.定義與類(lèi)型 定義:將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 用戶(hù)只需指定需要建造的類(lèi)型就可以得到他們,建造過(guò)程及細(xì)節(jié)不需要知道 類(lèi)型:創(chuàng)建型 實(shí)現(xiàn)建造模式的兩種方式 1.抽象建造者 UML: showImg(https://segmentfault.co...

    banana_pi 評(píng)論0 收藏0
  • Java設(shè)計(jì)模式之(三)——建造模式

    摘要:建造者模式實(shí)現(xiàn)建造者模式實(shí)現(xiàn)創(chuàng)建抽象建造者類(lèi)創(chuàng)建具體建造者類(lèi)。建造者模式使用場(chǎng)景建造者模式使用場(chǎng)景相同的方法,不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時(shí),可以采用建造者模式。1、什么是建造者模式 Separate the construction of a complex object from its representation so that the same constructi...

    Forelax 評(píng)論0 收藏0
  • #yyds干貨盤(pán)點(diǎn)#Java設(shè)計(jì)模式之(三)——建造模式

    1、什么是建造者模式Separate the construction of a complex object from its representation so that the same construction process can create different representations.將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離, 使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 說(shuō)人話:將構(gòu)...

    番茄西紅柿 評(píng)論0 收藏2637

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

0條評(píng)論

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