欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java開發(fā)建造者模式驗證實例詳解

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

引言

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

在這里插入圖片描述

在這里插入圖片描述

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

建造者模式將對象的創(chuàng)建和對象的表示分開,使用同樣的建造過程可以建造出不同的對象表示,一下我們使用計算機的生產(chǎn)過程為例,介紹建造者模式。計算機可以用來上網(wǎng)、辦公、娛樂等這個是計算機這個對象本身要提供給我們的功能(我們可以稱為對象表示) 我們稱其為computer。其構(gòu)造包括安裝主板、安裝CPU、安裝硬盤、網(wǎng)卡等構(gòu)造過程,我們稱之為bulider,假設聯(lián)想計算機和dell計算機具體的安裝方法上有差別,因此我們有LenovoBulider和DellBulider兩個具體的實現(xiàn)類,這個兩個類及bulider更關注具體的建造方法,我們再封裝一個類,調(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 +"    娛樂");
    }
}

抽象的建造者,把可變部分延遲到子類進行

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

    public abstract void buildCPU();

    public abstract void buildHardDisk();

    public abstract void buildMainboard();

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

兩個具體的建造者,完成那些不同建造方法的具體實現(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();

        //準備完畢,返回一個完整的計算機給調(diào)用者
        return computerBuilder.getComputer();
    }
}

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

建造者模式優(yōu)點及應用場景

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

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

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

拓展與總結(jié)

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

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

相關文章

  • java遞歸設置層級菜單的實現(xiàn)

    java遞歸設置層級菜單的實現(xiàn)

    本文主要介紹了java遞歸設置層級菜單的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應方式

    SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應方式

    這篇文章主要介紹了SpringBoot validator參數(shù)驗證restful自定義錯誤碼響應方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中的類初始化解析

    Java中的類初始化解析

    這篇文章主要介紹了Java中的類初始化解析,類的初始化是一個Java類生命周期中的其中一個階段,初始化是類加載的最后一個階段,也正是在初始化階段,才會真正開始執(zhí)行類中所寫的Java代碼,需要的朋友可以參考下
    2023-08-08
  • Java權(quán)重隨機的實現(xiàn)方法

    Java權(quán)重隨機的實現(xiàn)方法

    這篇文章主要介紹了Java權(quán)重隨機的實現(xiàn)方法,實例分析了權(quán)重隨機算法的原理與完整實現(xiàn)方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • java 如何讀取遠程主機文件

    java 如何讀取遠程主機文件

    這篇文章主要介紹了java 如何讀取遠程主機文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Spring MVC中使用Google kaptcha驗證碼的方法詳解

    Spring MVC中使用Google kaptcha驗證碼的方法詳解

    kaptcha 是一個非常實用的驗證碼生成工具。有了它,你可以生成各種樣式的驗證碼,因為它是可配置的,下面這篇文章主要給大家介紹了關于Spring MVC中使用Google kaptcha驗證碼的方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • 詳解Quartz 與 Spring框架集成的三種方式

    詳解Quartz 與 Spring框架集成的三種方式

    這篇文章主要介紹了詳解Quartz 與 Spring框架集成的三種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Java并發(fā)編程之Volatile變量詳解分析

    Java并發(fā)編程之Volatile變量詳解分析

    Volatile關鍵字是Java提供的一種輕量級的同步機制,本篇文章深入淺出的講講Java并發(fā)編程的Volatile,通讀本篇對大家的學習或工作具有一定的價值,需要的朋友可以參考下
    2021-10-10
  • Java實現(xiàn)動態(tài)規(guī)劃背包問題

    Java實現(xiàn)動態(tài)規(guī)劃背包問題

    本文主要介紹使用java實現(xiàn)動態(tài)規(guī)劃的背包問題,詳細使用圖文和多種案例進行解析,幫助理解該算法
    2021-06-06
  • 解決idea spring boot 修改html等不重啟即時生效的問題

    解決idea spring boot 修改html等不重啟即時生效的問題

    這篇文章主要介紹了解決idea spring boot 修改html等不重啟即時生效的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論