Builder 建造者模式

2022-07-04 11:12:10 字數 1907 閱讀 6214

當乙個物件的構造十分複雜時,我們需要將「構造過程」和他的「表示」進行分離,使得同樣的構建過程可以表示不同的物件。

這個時候,需要使用 builder 模式。使用者只需指定建造者的型別就可以得到對應的產品。而具體如何構造使用者並不關心。

而不同的物件的構造又是不同的,因此需要不同的建造者一一對應。

類圖設計如下:

builer相關:builder, buildera, builderb

/** 抽象建立者 */

public abstract class builder

/** 具體建立者,實際場景中,會有多個實現,即乙個產品實現對應乙個構建者 */

public class buildera extends builder

/** 具體構建者需要知道如何構建物件 */

@override

void buildername()

@override

void builderbody()

}/** 具體建立者,實際場景中,會有多個實現,即乙個產品實現對應乙個構建者 */

public class builderb extends builder

/** 具體構建者需要知道如何構建物件 */

@override

void buildername()

@override

void builderbody()

}

product相關:product,producta,productb

/** 產品,可以被抽象 */

public abstract class product

public class producta extends product';

}}public class productb extends product';

}}

director相關:director

/** 指揮者 */

public class director

}

測試類

/** 測試客戶端 */

public class builderclient

}

結果

productb

productb

從上面的**中可以看出,通過構造不同的 builder,可以得到對應的產品。大家可能會問,為什麼不直接建立產品?實際上,生產環境中的構造過程遠比 demo 複雜,將構造物件的複雜過程全部放入指揮者 director 中,能夠有效避免建立過程的錯誤。

通過使用 builder,能夠重複利用建立者,確保每次構造產品都是正確的。

即:

將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

這裡的「同樣的構建過程」 就是 director 中的 createproduct 方法。

「不同的表示」,則是每個 builder 實現對應乙個具體產品的具體構建內容。具體內容可以根據業務需求進行建立。

spring 框架中,builder 模式無處不在。總之,builder 就是為了構建不同的物件的同時,提供了穩定的構建過程,所有物件的構建過程都是被 driector 指揮的。而物件的具體構建內容則是子類 builder 來根據需求實現。有效的將物件的內容和構建過程分離,同時也保證了構建過程的穩定,不易出錯。

Builder 建造者模式

模式定義 builder模式很好地將乙個複雜物件的建立與該物件內部的各個部件的組裝分離開來。它和 abstract factory模式有相似的地方,但是abstract factory主要提供了乙個建立一些列相關或相互依賴的物件的介面,無需知道指定他們具體的類 生產者 而builder模式著重於部件...

建造者模式(Builder)

工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 還和前面一樣,乙個sender介面,兩個實現類mailsender和smssende...

建造者模式(Builder)

4 建造者模式 builder 工廠類模式提供的是建立單個類的模式,而建造者模式則是將各種產品集中起來進行管理,用來建立復合物件,所謂復合物件就是指某個類具有不同的屬性,其實建造者模式就是前面抽象工廠模式和最後的test結合起來得到的。我們看一下 建造者類如下 抽象產品類,使用了模板方法模式,不同產...