一.什麼是構建者模式:
將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。建立者模式隱藏了
複雜物件的建立過程,它把複雜物件的建立過程加以抽象,通過子類繼承或者過載的方式,動態的建立具
有復合屬性的物件。
二.適用場景:
1、隔離複雜物件的建立和使用,相同的方法,不同執行順序,產生不同事件結果
2、多個部件都可以裝配到乙個物件中,但產生的執行結果不相同
3、產品類非常複雜或者產品類因為呼叫順序不同而產生不同作用
4、初始化乙個物件時,引數過多,或者很多引數具有預設值
5、不適合建立差異性很大的產品類產品內部變化複雜,會導致需要定義很多具體建造者類實現變化,
增加專案中類的數量,增加系統的理解難度和執行成本
6、需要生成的產品物件有複雜的內部結構,這些產品物件具備共性
三.主要作用:
在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。
使用者只需要給出指定複雜物件的型別和內容;
建造者模式負責按順序建立複雜物件(把內部的建造過程和細節隱藏起來)
四.解決的問題:
方便使用者建立複雜的物件(不需要知道實現過程)
**復用性 & 封裝性(將物件構建過程和細節進行封裝 & 復用)
五.優缺點:
優點:使用建造者模式可以使客戶端不必知道產品內部組成的細節。
具體的建造者類之間是相互獨立的,這有利於系統的擴充套件。
具體的建造者相互獨立,因此可以對建造的過程逐步細化,而不會對其他模組產生任何影響。
缺點:建造者模式所建立的產品一般具有較多的共同點,其組成部分相似;如果產品之間的差異性很大,
則不適合使用建造者模式,因此其使用範圍受到一定的限制。如果產品的內部變化複雜,可能會
導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。
六.建造者模式與抽象工廠模式的比較:
1、與抽象工廠模式相比,建造者模式返回乙個組裝好的完整產品,而抽象工廠模式返回一系列相關
的產品,這些產品位於不同的產品等級結構,構成了乙個產品族。
2、在抽象工廠模式中,客戶端例項化工廠類,然後呼叫工廠方法獲取所需產品物件,而在建造者模
式中,客戶端可以不直接呼叫建造者的相關方法,而是通過指揮者類來指導如何生成物件,包括
物件的組裝過程和建造步驟,它側重於一步步構造乙個複雜物件,返回乙個完整的物件 。
3、如果將抽象工廠模式看成汽車配件生產工廠,生產乙個產品族的產品,那麼建造者模式就是乙個
汽車組裝工廠,通過對部件的組裝可以返回一輛完整的汽車
七.例子:
//非建造者模式的產品類:public
class
computer
}
//建造者模式的產品類:public
class
newcomputer
private
newcomputer(builder builder)
public
static
final
class
builder
public
builder cpu(string val)
public
builder screen(string val)
public
builder memory(string val)
public
builder mainboard(string val)
public
newcomputer build()
} }
//測試:public
class
click
}
設計模式 建造者模式
在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...
設計模式建造者模式
今天看了乙個設計模式。總結下,以免忘了。如何引入建造者模式的呢?作者舉了個例子。建造小人。當然需要 頭,左手,右手,左腳,右腳,軀幹。建造的過程使用 使用類裡面的方法就行了。但是如果需要乙個胖的小人,乙個瘦的小人呢?就需要重新構造乙個胖人類,乙個瘦人類。當然 使用者還需要自己處理構造的過程。這樣 就...
設計模式 建造者模式
定義 將乙個複雜的物件的構建與它的表示分離,是的同樣的構建過程可以建立不同的表示。包括的要素 1 產品類 2 抽象建造者或者介面 3 建造者 4 導演類 建造者模式的優點 首先,建造者模式的封裝很好,使用建造者模式可以有效地封裝變化,注意在使用建造者模式的場景中,一般產品類和建造者介面是比較穩定的,...