一、適用場景以及優缺點
1.適用場景
1)當建立複雜物件的演算法應該獨立於該物件的組成 部分,以及他們的裝配方式時。
2)相同的方法,不同的順序,產生不同的事件結果時。
3)多個部件或零件,都可以裝配到乙個物件中,但是產生的執行結果又不同時。
4)產品類非常複雜,或者產品類中的呼叫順序不同產生了不同的效能。
5)建立一些複雜的物件時,這些物件的內部元件間的建造順序是穩定的,但是物件的內部元件面臨著複雜的變化。
類似於:在現實生活中,我們經常會遇到一些構成比較複雜的物品,比如:電腦,它就是乙個複雜的物品,它主要是由cpu、主機板、硬碟、顯示卡、機箱等組裝而成的。
手機當然也是複雜物品,由主機板,各種晶元,ram 和rom 攝像頭之類的東西組成。但是無論是電腦還 是手機,他們的組裝過程是固定的,就拿手機來說,
組裝流水線是固定的,不變的,但是把不同的主機板和其他元件組裝在一起就會生產出不同型號的手機。
2.優點
1)使用建造者模式可以使客戶端不必知道產品內部組成的細節。
2)具體的建造者類之間是相互獨立的,容易擴充套件。
3)由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模組產生任何影響。
3.缺點
產生多餘的build物件以及dirextor(指導者)類。
二、動機以及組成部分
動機:
在軟體系統中,有時候面臨著「乙個複雜物件」的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,
但是將它們組合在一起的演算法卻相對穩定。
組成部分:
1)抽象建造者角色(builder):建立乙個抽象介面,此角色規定要實現複雜物件的那些部分的建立,卻不涉及具體的物件部件的建立。
2)具體建造者:實現builder的介面 以構造和裝配該產品的各個部件,也就是實現抽象建造者角色builder的方法。
定義並明確它所建立的表示,即針對不同的商業邏輯,具體化複雜物件的各部分的建立。
提供乙個檢索產品的介面。
構造乙個使用builder介面的物件即在指導者的呼叫下建立產品例項。
3)指導者(dirextor):呼叫具體建造者角色以建立產品物件的各個部分。指導者並沒有涉及具體產品類的資訊,真正擁有具體產品的資訊是具體建造者物件。
它只負責保證物件各部分完整建立或按照某種順序建立。
4)產品角色(product):建造中的複雜物件。它要包含那些定義元件的類,包括這些元件裝配成產品的介面。
**:
director director = new director();builder buickcarbuilder = new buickbuilder();
builder aodicarbuilder = new aodibuilder();
director.construct(buickcarbuilder);
//組裝完成,我來駕駛別克了
car1 buickcar = buickcarbuilder.getcar();
buickcar.show();
// 我老婆就要奧迪了,她比較喜歡大品牌
director.construct(aodicarbuilder);
car1 aodicar = aodicarbuilder.getcar();
aodicar.show();
/// /// 這個型別才是組裝的,construct方法裡面的實現就是建立複雜物件固定演算法的實現,該演算法是固定的,或者說是相對穩定的/// 這個人當然就是老闆了,也就是建造者模式中的指揮者
///
public class director
// 組裝新汽車(無輪子)
public void constructnew(builder builder)
}/// /// 汽車類
///
public sealed class car1
public void show()
console.writeline("汽車組裝好了");}}
/// /// 抽象建造者,它定義了要建立什麼部件和最後建立的結果,但是不是組裝的的型別,切記
///
public abstract class builder
/// /// 具體建立者,具體的車型的建立者,例如:別克
///
public sealed class buickbuilder : builder
public override void buildcarwheel()
public override void buildcarengine()
public override car1 getcar()
}/// /// 具體建立者,具體的車型的建立者,例如:奧迪
///
public sealed class aodibuilder : builder
public override void buildcarwheel()
public override void buildcarengine()
public override car1 getcar()
}
3 建造者模式 設計模式筆記
分類 1 建立型模式 單例模式,工廠模式,抽象工廠模式,建造者模式,原型模式 2 結構型模式 介面卡模式,橋接模式,裝飾模式,組合模式,外觀模式,享元模式,模式 3 行為型模式 模板方法模式,命令模式,迭代器模式,觀察者模式,中介者模式,備忘錄模式,直譯器模式,狀態模式,策略模式,職責鏈模式,訪問者...
設計模式學習筆記 建造者模式
1.概述 將乙個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。2.建造者模式中的角色 2.1 建造者 builder 為建立乙個產品物件的各個部件指定抽象介面。2.2 具體建造者 concretebuilder 實現builder的介面以構造和裝配...
設計模式 建造者模式
在gof的23種設計模式中對builder pattern的定義是 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。從程式角度來說,就是在基類定義某種事物建立的過程或業務流程,在子類進行重寫或是使用基類方法。這樣建立出來的例項不會因為過程或流程的丟失而使業務失敗。舉例來說,...