定義
將構(gòu)建復雜對象的過程和它的部件解耦褐隆,使構(gòu)建過程與部件的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示的創(chuàng)建型模式朽合。
特點
Builder模式一步一步創(chuàng)建一個復雜對象鉴裹,允許用戶在不知道內(nèi)部構(gòu)建細節(jié)的情況下,可以更精細地控制對象的構(gòu)造流程廷没。
Builder是非線程安全的糊饱,所以如果要在Builder內(nèi)部類中檢查一個參數(shù)的合法性,必需要在對象創(chuàng)建完成之后再檢查颠黎。
應用場景
初始化一個對象特別復雜另锋,如參數(shù)多,且很多參數(shù)都具有默認值時狭归;
復雜產(chǎn)品類中的調(diào)用順序不同產(chǎn)生不同的效能時夭坪;
相同方法不同的執(zhí)行順序,產(chǎn)生不同的事件結(jié)果時过椎;
角色
Product——產(chǎn)品類 :? 產(chǎn)品的抽象類室梅。
Builder——抽象類, 規(guī)范產(chǎn)品的組建,一般是由子類實現(xiàn)具體的組件過程亡鼠。
ConcreteBuilder——具體的構(gòu)建者赏殃。
Director——指揮者,統(tǒng)一組裝過程(可省略间涵,Builder定義為Product的內(nèi)部類仁热,ConcreteBuilder在Product子類中)。
模式代碼
/**
* 1.產(chǎn)品類
?* 如果有多個產(chǎn)品類則繼承該類勾哩,每個產(chǎn)品類有對應的具體的建造者
*/
public class Product{ ??
????public void doSomething() {
? ? ? ? // 處理業(yè)務 ?
? ? }
}
/**
* 2.抽象建造者
* 有多個產(chǎn)品類則有多個具體的建造者
*/
public abstract class Builder{
????// 設置產(chǎn)品零件:設置產(chǎn)品的不同零件股耽,或者不同的裝配順序,以產(chǎn)生不同的產(chǎn)品
????public abstract void setPart();
????// 組建一個產(chǎn)品
????public abstract Product buildProduct();
}
/**
* 3.具體建造者
*/
public class ConcreteBuilder extends Builder{
????private Product product =new Product();
? ?? // 設置產(chǎn)品零件
? ? public void setPart() {
????????// 產(chǎn)品類內(nèi)的邏輯處理? ?
? ? }
????// 組建一個產(chǎn)品
????public Product buildProduct() {
????????return product;
??? }
}
/**
* 4.指揮者類
* 指揮者類起到封裝的作用钳幅,避免高層模塊深入到建造者內(nèi)部的實現(xiàn)類
*/
public class Director{
????private Builder builder =new ConcreteBuilder();
????public Product getProduct() {
????????builder.setPart();
? ? ? ? return builder.buildProduct();?
?? }
}