輕松掌握J(rèn)ava建造者模式
建造者模式針對(duì)的是復(fù)雜對(duì)象的構(gòu)建,比如一個(gè)產(chǎn)品有多個(gè)部分構(gòu)成,每個(gè)部分都可以單獨(dú)進(jìn)行生產(chǎn),這時(shí)候就可以用建造者模式,由Builder構(gòu)造產(chǎn)品的每個(gè)部分,然后又director完成最后產(chǎn)品的組裝。
特點(diǎn):
1、分工更加明確,組建和構(gòu)造分開(kāi),能更好的控制產(chǎn)品的生產(chǎn)。
2、容易擴(kuò)展,有新的需求的時(shí)候,只要實(shí)現(xiàn)Builder借口就可以了。
企業(yè)級(jí)開(kāi)發(fā)和常用框架中的應(yīng)用:JMail
組成:產(chǎn)品類,抽象建造者,建造者,導(dǎo)演。
產(chǎn)品類:
public class Product{ private String partA;//產(chǎn)品的某個(gè)部分,實(shí)際開(kāi)發(fā)中可能對(duì)應(yīng)一個(gè)類 private String partB;//產(chǎn)品的某個(gè)部分,實(shí)際開(kāi)發(fā)中可能對(duì)應(yīng)一個(gè)類 private String partC;//產(chǎn)品的某個(gè)部分,實(shí)際開(kāi)發(fā)中可能對(duì)應(yīng)一個(gè)類 //構(gòu)造器及set、get方法 }
抽象建造者:
//也可以是抽象類 public interface Builder{ public void setPartA(String partA); public void setPartB(String partB); public void setPartC(String partC); }
建造者實(shí)現(xiàn)類:
public class BuilderImpl implements Builder{ private Product product; public BuilderImpl(){ product = new Product(); } public void builderPartA(){ String partA = new String();//模擬工廠方法生產(chǎn)產(chǎn)品的某一個(gè)部分 product.setPartA(partA); } public void builderPartB(){ String partB = new String();//模擬工廠方法生產(chǎn)產(chǎn)品的某一個(gè)部分 product.setPartB(partB); } public void setPartC(){ String partC = new String();//模擬工廠方法生產(chǎn)產(chǎn)品的某一個(gè)部分 product.setPartC(partC); } public Product getProduct(){ return this.product; } }
導(dǎo)演類:
public class Director{ private Builder b ; public Director(Builder newB){ this.b = newB; } public void createBuilder(Builder b){ this.b = b; } public Product constructProduct(){ b.builderPartA(); b.builderPartB(); b.builderPartC(); } }
測(cè)試類:
public class Demo{ public static void main(String[] args){ Builder b = new BuilderImpl(); Director d = new Director(); d.createBuilder(b); Product p = c.constructProduct(); } }
從上面的例子中我們不難發(fā)現(xiàn),如果我們另外實(shí)現(xiàn)導(dǎo)演類,完全可能組裝出另一個(gè)不同的產(chǎn)品,因?yàn)閷?dǎo)演類控制了產(chǎn)品的組裝,同樣的,如果我們重新實(shí)現(xiàn)抽象構(gòu)建類,也可能出現(xiàn)完全不同的產(chǎn)品,所以,從中可以發(fā)現(xiàn),構(gòu)建者模式更加的抽象化,流程化。
相比于抽象工廠模式,不難發(fā)現(xiàn)這兩者驚人的相似,但為什么還會(huì)分出兩種不同的設(shè)計(jì)模式呢,其實(shí)重點(diǎn)就在產(chǎn)品的復(fù)雜程度和抽象程度上,建造者模式比抽象工廠模式更加的抽象化,復(fù)雜化,也就是說(shuō)建造者模式應(yīng)對(duì)的產(chǎn)品比抽象工廠應(yīng)對(duì)的產(chǎn)品更加復(fù)雜,同時(shí),在產(chǎn)品生產(chǎn)流程長(zhǎng)更加的抽象。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Java使用建造者模式實(shí)現(xiàn)辦理手機(jī)套餐功能詳解
- Java設(shè)計(jì)模式之Builder建造者模式
- Java設(shè)計(jì)模式之建造者模式實(shí)例詳解
- 建造者模式_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
- JAVA設(shè)計(jì)模式之建造者模式原理與用法詳解
- Java Builder Pattern建造者模式詳解及實(shí)例
- Java運(yùn)用設(shè)計(jì)模式中的建造者模式構(gòu)建項(xiàng)目的實(shí)例解析
- 理解java設(shè)計(jì)模式之建造者模式
- 深入解析Java的設(shè)計(jì)模式編程中建造者模式的運(yùn)用
- 講解Java設(shè)計(jì)模式編程中的建造者模式與原型模式
- Java設(shè)計(jì)模式之建造者模式(Builder模式)介紹
- java設(shè)計(jì)模式之建造者模式學(xué)習(xí)
- java實(shí)現(xiàn)建造者模式(Builder Pattern)
相關(guān)文章
Spring?Boot+Vue實(shí)現(xiàn)Socket通知推送的完整步驟
最近工作中涉及消息通知功能的開(kāi)發(fā),所以下面這篇文章主要給大家介紹了關(guān)于Spring?Boot+Vue實(shí)現(xiàn)Socket通知推送的完整步驟,文中通過(guò)實(shí)例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04Spring Boot2與Spring Boot3的區(qū)別小結(jié)
SpringBoot2和SpringBoot3之間有一些重要的區(qū)別,本文就來(lái)探討SpringBoot2和SpringBoot3之間的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下2023-10-10Java實(shí)現(xiàn)文件讀取和寫(xiě)入過(guò)程解析
這篇文章主要介紹了Java實(shí)現(xiàn)文件讀取和寫(xiě)入過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值。,需要的朋友可以參考下2019-10-10劍指Offer之Java算法習(xí)題精講鏈表與數(shù)組專項(xiàng)訓(xùn)練
跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03SpringMVC + servlet3.0 文件上傳的配置和實(shí)現(xiàn)代碼
本篇文章主要介紹了SpringMVC + servlet3.0 文件上傳的配置和實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-04-04如何在java 8 stream表達(dá)式實(shí)現(xiàn)if/else邏輯
這篇文章主要介紹了如何在java 8 stream表達(dá)式實(shí)現(xiàn)if/else邏輯,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04在java中使用SPI創(chuàng)建可擴(kuò)展的應(yīng)用程序操作
這篇文章主要介紹了在java中使用SPI創(chuàng)建可擴(kuò)展的應(yīng)用程序操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(18)
下面小編就為大家?guī)?lái)一篇Java基礎(chǔ)的幾道練習(xí)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧,希望可以幫到你2021-07-07