一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java開發建造者模式驗證實例詳解

java開發建造者模式驗證實例詳解

2022-02-16 14:47guoyp2126 Java教程

這篇文章主要為大家介紹了java開發中建造者模式的驗證實例詳解,文中附含詳細示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助

 

引言

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

java開發建造者模式驗證實例詳解

java開發建造者模式驗證實例詳解

 

經典再現

建造者模式將對象的創建和對象的表示分開,使用同樣的建造過程可以建造出不同的對象表示,一下我們使用計算機的生產過程為例,介紹建造者模式。計算機可以用來上網、辦公、娛樂等這個是計算機這個對象本身要提供給我們的功能(我們可以稱為對象表示) 我們稱其為computer。其構造包括安裝主板、安裝CPU、安裝硬盤、網卡等構造過程,我們稱之為bulider,假設聯想計算機和dell計算機具體的安裝方法上有差別,因此我們有LenovoBulider和DellBulider兩個具體的實現類,這個兩個類及bulider更關注具體的建造方法,我們再封裝一個類,調用這些建造方法完成完成產品的構建,就產生了我們經典的建造者模式。上例類圖如下:

java開發建造者模式驗證實例詳解

產品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();

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

兩個具體的建造者,完成那些不同建造方法的具體實現,代碼如下

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("聯想 CPU");
    }

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

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

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

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

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

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

 

建造者模式優點及應用場景

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

 

工廠方法模式和建造者模式區別

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

 

拓展與總結

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

以上就是java開發建造者模式驗證實例詳解的詳細內容,更多關于java建造者模式驗證的資料請關注服務器之家其它相關文章!

原文鏈接:https://blog.csdn.net/guoyp2126/article/details/120705459

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 99久久香蕉国产综合影院 | 国产视频三区 | 果冻传媒天美传媒乌鸦传媒 | 亚洲天堂视频在线播放 | 女同学用白丝脚玩我的故事 | 日本精品一卡二卡≡卡四卡 | 91人成尤物在线 | 亚洲成在人网站天堂一区二区 | 日韩欧美色图 | 特大黑人娇小亚洲女mp4 | 女女同性做爰xxoo亲吻 | 久久综合中文字幕佐佐木希 | 国产免费丝袜调教视频 | 成年人免费在线看 | 麻豆天美精东果冻传媒在线 | 国产一区日韩二区欧美三区 | 手机在线观看网站免费视频 | 91sao在线看片水片 | 免费看又黄又爽又猛的视频软件- | 蜜月aⅴ免费一区二区三区 蜜桃影像传媒推广 | chinesezoozvideos| 香蕉久草在线 | 国产亚洲sss在线播放 | free性泰国女人hd | 天堂漫画破解版 | 久久亚洲精品中文字幕60分钟 | 亚洲红怡院 | 九九热在线观看视频 | 狠狠澡 | 欧美成人另类人妖 | 亚洲精品免费观看 | 日本免费精品 | 国产探花在线观看 | 朝鲜女人free性hu | 青青青草国产 | 精品国产精品人妻久久无码五月天 | 免费jizz在在线播放国产 | 男人影院在线观看 | 男人边吃奶边做好爽视频免费 | 91国语自产拍在线观看 | 国产精品原创巨作无遮挡 |