最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java開發(fā)建造者模式驗(yàn)證實(shí)例詳解

 更新時(shí)間:2021年10月12日 14:15:50   作者:guoyp2126  
這篇文章主要為大家介紹了java開發(fā)中建造者模式的驗(yàn)證實(shí)例詳解,文中附含詳細(xì)示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助

引言

創(chuàng)建一個(gè)類的實(shí)例,我們通常使用類中構(gòu)造函數(shù)來完成對(duì)象的初始化,如果一個(gè)對(duì)象構(gòu)造過程很復(fù)雜,如果將構(gòu)造過程和對(duì)象使用的過程放在一起,就顯得這個(gè)類很笨重,職責(zé)也不單一,最好的解決辦法就是將構(gòu)造過程拿出來單獨(dú)進(jìn)行封裝,類的使用單獨(dú)封裝一個(gè)類就會(huì)好很多。如:mybaits中的SqlSessionFactoryBulider和SqlSessionFactory兩個(gè)類,下圖為SqlSessionFactoryBulider和SqlSessionFactory兩個(gè)類提供的方法。前者職責(zé)是根據(jù)mybaits的配置文件(配置文件很復(fù)雜,構(gòu)造過程更復(fù)雜)構(gòu)造SqlSessionFactory實(shí)例對(duì)象,后者職責(zé)是SqlSessionFactory專注于的各種情況的下SqlSession的生成。

在這里插入圖片描述

在這里插入圖片描述

經(jīng)典再現(xiàn)

建造者模式將對(duì)象的創(chuàng)建和對(duì)象的表示分開,使用同樣的建造過程可以建造出不同的對(duì)象表示,一下我們使用計(jì)算機(jī)的生產(chǎn)過程為例,介紹建造者模式。計(jì)算機(jī)可以用來上網(wǎng)、辦公、娛樂等這個(gè)是計(jì)算機(jī)這個(gè)對(duì)象本身要提供給我們的功能(我們可以稱為對(duì)象表示) 我們稱其為computer。其構(gòu)造包括安裝主板、安裝CPU、安裝硬盤、網(wǎng)卡等構(gòu)造過程,我們稱之為bulider,假設(shè)聯(lián)想計(jì)算機(jī)和dell計(jì)算機(jī)具體的安裝方法上有差別,因此我們有LenovoBulider和DellBulider兩個(gè)具體的實(shí)現(xiàn)類,這個(gè)兩個(gè)類及bulider更關(guān)注具體的建造方法,我們?cè)俜庋b一個(gè)類,調(diào)用這些建造方法完成完成產(chǎn)品的構(gòu)建,就產(chǎn)生了我們經(jīng)典的建造者模式。上例類圖如下:

在這里插入圖片描述

產(chǎn)品Computer 示例代碼如下:

public class Computer {
    private String hardDisk ;
    private String CPU;
    private String mainboard ;

    public void setHardDisk(String hardDisk) {
        this.hardDisk = hardDisk;
    }
    public void setCPU(String CPU) {
        this.CPU = CPU;
    }
    public void setMainboard(String mainboard) {
        this.mainboard = mainboard;
    }

    public void start()
    {
        System.out.println(hardDisk+"  "+CPU+"   "+ mainboard +"    辦公");
    }

    public void work()
    {
        System.out.println(hardDisk+"  "+CPU+"   "+ mainboard +"    辦公");
    }

    public void play()
    {
        System.out.println(hardDisk+"  "+CPU+"   "+ mainboard +"    娛樂");
    }
}

抽象的建造者,把可變部分延遲到子類進(jìn)行

public abstract class ComputerBulider {
    protected Computer acomputer = new Computer();

    public abstract void buildCPU();

    public abstract void buildHardDisk();

    public abstract void buildMainboard();

    //關(guān)鍵代碼需要返回一個(gè)產(chǎn)品的對(duì)象
    public Computer getComputer(){
        return acomputer;
    }
}

兩個(gè)具體的建造者,完成那些不同建造方法的具體實(shí)現(xiàn),代碼如下

public class DellBulider extends ComputerBulider {
    @Override
    public void buildCPU() {
        acomputer.setCPU("dell CPU");
    }

    @Override
    public void buildHardDisk() {
        acomputer.setHardDisk("dell 硬盤");
    }

    @Override
    public void buildMainboard() {
        acomputer.setMainboard("dell 主板");
    }
}

public class LenovoBulider extends ComputerBulider {
    @Override
    public void buildCPU() {
        acomputer.setCPU("聯(lián)想 CPU");
    }

    @Override
    public void buildHardDisk() {
        acomputer.setHardDisk("聯(lián)想 硬盤");
    }

    @Override
    public void buildMainboard() {
        acomputer.setMainboard("聯(lián)想 主板");
    }
}

指揮者,總體包裝師代碼如下:

//指揮者,接收指令安排建造者根據(jù)一定的工序去制作產(chǎn)品
public class Director {
    private ComputerBulider computerBuilder;
    public Director(ComputerBulider comBuilder) {
        this.computerBuilder = comBuilder;
    }
    public Computer construct(){
        //安裝主板
        computerBuilder.buildMainboard();
        //安裝cpu
        computerBuilder.buildCPU();
        //安裝硬盤
        computerBuilder.buildHardDisk();

        //準(zhǔn)備完畢,返回一個(gè)完整的計(jì)算機(jī)給調(diào)用者
        return computerBuilder.getComputer();
    }
}

巧妙之處,在于通過構(gòu)造注入的方式,將具體的建造者對(duì)象傳入,按照流程化方式建造了一個(gè)完整的對(duì)象。
通過代碼我們可以想象如果要生產(chǎn)一臺(tái)華碩計(jì)算機(jī),我們只需要擴(kuò)展一個(gè)華碩的具體bulider即可,原有的代碼完全不用動(dòng),符合開閉原則。另外我們指揮者類中只出現(xiàn)抽象的bulider,具體bulider完全可以替換它,符合里氏替換原則。當(dāng)然每個(gè)類各司其職,職責(zé)清晰,滿足單一職責(zé)原則。

建造者模式優(yōu)點(diǎn)及應(yīng)用場(chǎng)景

優(yōu)點(diǎn):客戶端不必知道產(chǎn)品內(nèi)部組成的細(xì)節(jié),將產(chǎn)品本身與產(chǎn)品的創(chuàng)建過程解耦,使得相同的創(chuàng)建過程可以創(chuàng)建不同的產(chǎn)品對(duì)象;每一個(gè)具體建造者都相對(duì)獨(dú)立,而與其他的具體建造者無關(guān);可以更加精細(xì)地控制產(chǎn)品的創(chuàng)建過程。
應(yīng)用場(chǎng)景:建造者模式所創(chuàng)建的產(chǎn)品一般具有較多的共同點(diǎn),其組成部分相似,如果產(chǎn)品之間的差異性很大,則不適合使用建造者模式

工廠方法模式和建造者模式區(qū)別

工廠方法模式輸出的是產(chǎn)品;而建造者模式中的builder輸出的是一個(gè)個(gè)零部件,再由指揮者進(jìn)行包裝形成產(chǎn)品。建造者模式更加關(guān)注與零件裝配的順序

拓展與總結(jié)

只要符合將對(duì)象的創(chuàng)建和對(duì)象的表示分離,就屬于建造者模式。建造者模式在實(shí)際使用中有很多變種,如JDK中StringBulider及mybatis中SqlSessionFactoryBulider,就沒有指揮者,但是也隸屬于建造模式,在使用過程中需要我們根據(jù)概念活學(xué)活用。在實(shí)際開發(fā)中,建造者模式又經(jīng)常和工廠模式結(jié)合使用。

以上就是java開發(fā)建造者模式驗(yàn)證實(shí)例詳解的詳細(xì)內(nèi)容,更多關(guān)于java建造者模式驗(yàn)證的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot基于JAXB實(shí)現(xiàn)天地圖路徑規(guī)劃結(jié)果XML轉(zhuǎn)JSON

    SpringBoot基于JAXB實(shí)現(xiàn)天地圖路徑規(guī)劃結(jié)果XML轉(zhuǎn)JSON

    這篇文章主要為大家詳細(xì)介紹了SpringBoot如何基于JAXB實(shí)現(xiàn)將天地圖路徑規(guī)劃結(jié)果XML轉(zhuǎn)JSON功能,文中的示例代碼講解詳細(xì),需要的可以了解下
    2025-02-02
  • Mybatis一對(duì)一延遲加載實(shí)現(xiàn)過程解析

    Mybatis一對(duì)一延遲加載實(shí)現(xiàn)過程解析

    這篇文章主要介紹了Mybatis一對(duì)一延遲加載實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 通過url方式傳遞中文亂碼的解決方法

    通過url方式傳遞中文亂碼的解決方法

    本篇文章主要是對(duì)通過url方式傳遞中文亂碼的解決方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧

    Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧

    數(shù)組越界訪問是指訪問數(shù)組中超出其有效索引范圍的元素,這是一種常見的編程錯(cuò)誤,可能導(dǎo)致程序崩潰或數(shù)據(jù)損壞,下面這篇文章主要給大家介紹了關(guān)于Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Java+OpenCV調(diào)用攝像頭實(shí)現(xiàn)拍照功能

    Java+OpenCV調(diào)用攝像頭實(shí)現(xiàn)拍照功能

    隨著我們對(duì)環(huán)境、Mat基本使用越來越熟練、Java Swing也逐步熟悉了起來。本文將通過OpenCV驅(qū)動(dòng)攝像頭實(shí)現(xiàn)識(shí)臉和拍照功能,需要的可以參考一下
    2022-03-03
  • springboot集成mybatisplus的方法

    springboot集成mybatisplus的方法

    這篇文章主要為大家詳細(xì)介紹了springboot集成mybatisplus的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • SpringBoot3集成Swagger3的詳細(xì)教程

    SpringBoot3集成Swagger3的詳細(xì)教程

    Swagger 3(OpenAPI 3.0)提供了更加強(qiáng)大和靈活的API文檔生成能力,本教程將指導(dǎo)您如何在Spring Boot 3項(xiàng)目中集成Swagger3,并使用Knife4j作為UI界面,需要的朋友可以參考下
    2024-03-03
  • Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本

    Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本

    這篇文章主要介紹了Java如何實(shí)現(xiàn)支付寶電腦支付基于servlet版本,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Mybatis-Plus?CRUD操作方法

    Mybatis-Plus?CRUD操作方法

    通用?Service?CRUD?封裝?IService?接口,進(jìn)一步封裝?CRUD?采用?get?查詢、remove?刪除?、list?查詢集合、page?分頁(yè)的前綴命名方式區(qū)分?Mapper?層避免混淆,這篇文章主要介紹了Mybatis-Plus?CRUD的相關(guān)知識(shí),需要的朋友可以參考下
    2023-10-10
  • 使用SpringBoot與Thrift實(shí)現(xiàn)RPC通信的方式詳解

    使用SpringBoot與Thrift實(shí)現(xiàn)RPC通信的方式詳解

    在微服務(wù)架構(gòu)的世界里,服務(wù)間的通信機(jī)制選擇成為了關(guān)鍵決策之一,RPC因其簡(jiǎn)潔、高效的特點(diǎn)備受青睞,本文將詳細(xì)探討如何利用Spring?Boot和Thrift框架構(gòu)建RPC通信,讓讀者理解其內(nèi)在原理及實(shí)現(xiàn)方式,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

大化| 浮山县| 乐至县| 茌平县| 马尔康县| 临清市| 巴南区| 和田县| 永泰县| 东兰县| 四川省| 罗定市| 廉江市| 揭东县| 普宁市| 嘉定区| 嫩江县| 和龙市| 阳曲县| 屯门区| 白玉县| 平武县| 桐城市| 宁武县| 石林| 彭水| 灵宝市| 库伦旗| 八宿县| 南平市| 司法| 米林县| 杭锦旗| 利川市| 库伦旗| 夏邑县| 通海县| 同江市| 从江县| 叶城县| 肥西县|