建造者模式(Builder模式)

定義

將構(gòu)建復(fù)雜對(duì)象的過程和它的部件解耦,使構(gòu)建過程與部件的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示的創(chuàng)建型模式。

特點(diǎn)

Builder模式一步一步創(chuàng)建一個(gè)復(fù)雜對(duì)象,允許用戶在不知道內(nèi)部構(gòu)建細(xì)節(jié)的情況下,可以更精細(xì)地控制對(duì)象的構(gòu)造流程。

Builder是非線程安全的,所以如果要在Builder內(nèi)部類中檢查一個(gè)參數(shù)的合法性,必需要在對(duì)象創(chuàng)建完成之后再檢查。

應(yīng)用場景

初始化一個(gè)對(duì)象特別復(fù)雜,如參數(shù)多,且很多參數(shù)都具有默認(rèn)值時(shí);

復(fù)雜產(chǎn)品類中的調(diào)用順序不同產(chǎn)生不同的效能時(shí);

相同方法不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時(shí);

角色

Product——產(chǎn)品類 :? 產(chǎn)品的抽象類。

Builder——抽象類, 規(guī)范產(chǎn)品的組建,一般是由子類實(shí)現(xiàn)具體的組件過程。

ConcreteBuilder——具體的構(gòu)建者。

Director——指揮者,統(tǒng)一組裝過程(可省略,Builder定義為Product的內(nèi)部類,ConcreteBuilder在Product子類中)。

模式代碼

/**

* 1.產(chǎn)品類

?* 如果有多個(gè)產(chǎn)品類則繼承該類,每個(gè)產(chǎn)品類有對(duì)應(yīng)的具體的建造者

*/

public class Product{ ??

????public void doSomething() {

? ? ? ? // 處理業(yè)務(wù) ?

? ? }

}

/**

* 2.抽象建造者

* 有多個(gè)產(chǎn)品類則有多個(gè)具體的建造者

*/

public abstract class Builder{

????// 設(shè)置產(chǎn)品零件:設(shè)置產(chǎn)品的不同零件,或者不同的裝配順序,以產(chǎn)生不同的產(chǎn)品

????public abstract void setPart();

????// 組建一個(gè)產(chǎn)品

????public abstract Product buildProduct();

}

/**

* 3.具體建造者

*/

public class ConcreteBuilder extends Builder{

????private Product product =new Product();

? ?? // 設(shè)置產(chǎn)品零件

? ? public void setPart() {

????????// 產(chǎn)品類內(nèi)的邏輯處理? ?

? ? }

????// 組建一個(gè)產(chǎn)品

????public Product buildProduct() {

????????return product;

??? }

}

/**

* 4.指揮者類

* 指揮者類起到封裝的作用,避免高層模塊深入到建造者內(nèi)部的實(shí)現(xiàn)類

*/

public class Director{

????private Builder builder =new ConcreteBuilder();

????public Product getProduct() {

????????builder.setPart();

? ? ? ? return builder.buildProduct();?

?? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容