建造者模式是最複雜的建立型模式,它用於建立乙個包含多個組成部分的複雜物件,可以返回乙個完整的產品物件給使用者,建造者模式關注該複雜物件是如何一步一步建立而成的,對於使用者而言,無需知道建立過程和內部組成細節,只需要使用建立好的完整物件即可
複雜物件相當於一輛有待建造的汽車,而物件的屬性相當於汽車的部件,建造產品的過程就相當於組裝部件的過程。由於組裝部件過程很複雜,因此,這些部件的組裝過程被「外部化」到乙個稱作建造者的物件裡,建造者返回客戶端的是乙個建造完成的完整的產品物件,而使用者無需關心該物件所包含的屬性以及他們的組裝方式,這就是建造者模式的模式動機。
將乙個複雜物件的構建與他的表示分離,使得同樣的構造過程可以建立不同的表示,建造者模式是一步一步建立乙個複雜的物件,他允許使用者只通過複雜物件的型別和內容就可以建立他們,使用者不需要知道內部建立的具體細節。
案例分析:
描述:kfc建立不同的**,**是乙個複雜物件,它一般包含主食(漢堡、雞肉卷)和飲料(果汁、可樂)等組成部分,不同的**有著不同的組成部分,而kfc的服務員可以根據顧客不同的需求,一步一步的裝配這些組成部分,構造乙個完整的**,然後給顧客。
服務員在這裡就相當於建造模式中的指揮類角色,呼叫不同的建造者完成組裝過程,然後將產品給使用者
偽**:
//產品類meal(**),這個就是複雜產品物件,它包括food和dirnk兩個成員屬性,其中food表示主食,drink表示飲料,還有getter setter方法
public class meal
public void setdrink($dirnk)
public void getfood()
public void getdrink()
}//**建造者者類mealbuilder(**建造者類),它是乙個抽象類,生命了抽象的部件組裝方法buildfood() 和builddrink(),meanbuilder抽象類中還定義了meal型別的物件meal,提供工廠方法getmeal返回meal物件
public abstract class mealbuilder
}//具體建造者類submealbuildera,(**a的建立者),它是抽象類mealbuilder的子類,實現了在抽象父類中宣告的builderfood和builderdrink的部件組裝方法,該**有乙個漢堡和乙個肌肉卷組成
public class submealbuildera extends mealbuilder
public void builderdrink()
}//具體建造者類submealbuilderb,用於建立**b,由乙個雞肉卷和一杯果汁組成
public class submealbuilderb extends mealbuilder
public void builderdrink() }
//指揮者類kfcwaiter(kfc服務員),在kfc**製作工程中,他就是kfc的服務員,在其中定義了乙個抽象建造者型別的變數mb,具體建造著型別由客戶端制定,在其construct()方法中呼叫mb物件的部件組裝方法和返回meal物件的工廠方法,用於向客戶端返回乙個包含主食和飲料的完整**。
public class kfcwailter
public meal construct()
}//客戶端呼叫**
mealbuilder $mb = new config::get('use_builder');//獲取具體的建造者類並例項化
kfcwailter $waiter = new kfcwailter();//例項化呼叫者類
$wailter->setmealbuilder($mb);//為指揮者設定具體建造者類
meal $meal = $wailter->constrcunt();//組裝並且返回
最後總結:
1.建造者模式將乙個複雜物件的建立於它的表示分離,這樣同樣的建立過程可以建立不同的而表示。建造者模式是一步一步的建立乙個複雜的物件,它允許使用者只通過制定複雜物件的型別和內容就可以建立他們,使用者不需要知道內部的具體構建細節,建造者模式屬於類建立模式。
2.建造者模式包含如下四個角色:抽象建造者是為具體建造者建立乙個產品物件的各個部件指定的**介面,是具體建造者的父類;具體建造者繼承抽象建造者,實現父類中各部件的構造和裝配方法,定義它建立的複雜物件;產品抉擇就是那個藥構建的複雜的物件,包含多個部件;指揮者負責安排複雜物件的建造次序,指揮者與**建造者存在關聯關係,指揮著面向抽象程式設計,通過呼叫具體建造者方法完成複雜物件的構造。
3.在建造者模式中引入了乙個指揮者類,該類的作用主要有兩個:第一是隔離客戶與生產的過程;第二是它複雜產品的建立過程。指揮者只對**程式設計,客戶端只需要知道要構建的複雜物件的型別,即可通過指揮者類呼叫建立者的相關方法完成產品的構建。
4.建造者模式的主要優點在於客戶端不需要知道產品內部具體的建立過程,將產品本身與建立過程解耦,是相同的建立過程可以建立不同的產品,每乙個具體的建造者都是相互獨立,與其他建造者無關,因此可以在系統中方便的通過替換建造者或者增加具體的建造者來完成需求變更,符合開閉原則,還可以更加精細的控制產品的建立過程;主要缺點是由於建造者模式所建立的產品一般具有較多的共同點,其組成部分形似,因此在使用範圍上受到了一定程度的限制,如果產品內部變化過於複雜,那麼可能導致需要定義很多建造者類來實現這種變化,從而導致系統變得龐大臃腫 不利於維護.
5.建造者模式使用情況包括:需要生成的產品物件有複雜的內部結構,這些產品物件通常包含多個成員屬性;需要生成的產品物件的屬性相互依賴,需要指定其生成順序,物件的建立過程獨立於建立該物件的類;隔離複雜物件的建立和使用,並使得相同的建立過程可以建立出不同的產品物件。
設計模式4 建造者模式
首先說說建造者模式要解決乙個什麼樣的問題 流程控制,即保證方法先後順序正確且沒有遺漏.用於靈活指導操作細節.建造者模式包括 乙個導演類 用於規定操作順序 乙個建造者介面 用於規定建造者的操作 具體的建造者 建造者的具體實現類 例如 public class buildertest class fil...
4 設計模式 建造者模式
前段時間一直忙於考證,沒有整理,開啟部落格感覺又好像過了很久的樣子,哎,鬆懈時間過得真快,今天整理一波建造者模式。從字面意思建造者模式更傾向於建造。例如計算機包含滑鼠,鍵盤,耳機,音響,印表機等等硬體裝置。這是乙個相對比較複雜的物件。而我們要建立的是計算機這個整體,如果採用工廠模式就沒那麼專業。因為...
設計模式 4 建造者模式
說明 將很多事情,一件一件的按順序組裝形成,stringbuilding就是建造者模式。場景 當乙個流程由很多功能組成,可以直接使用,然後每個實現就好。實現 public class customer 組裝電腦需要的步驟,這裡只組裝了cpu,硬碟 public abstract class ling...