建造者模式
(和造房子是最像的)
建造者模式也屬於建立型模式它提供了一種建立物件的最佳方式。
定義: 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示
主要作用:在使用者不知道物件的建造過程和細節的情況下就可以直接建立複雜的物件。
使用者只需要給出指定複雜物件的型別和內容,建造者模式負責按順序建立複雜物件(把內部的建造過程和細節隱藏起來)
例子:工廠(建造者模式) :負責製造汽車(組裝過》程和細節在工廠內)
汽車購買者(使用者) :你只需要說出你需要的》型號(物件的型別和內容),然後直接購買就 可以使用了(不需要知道汽車是怎麼組裝的(車輪、 車門、>發動機、方向盤等等) )
既然是建造者模式,那麼我們還是繼續造房吧,其實我也想不到更簡單的例子。假設造房簡化為如下步驟:
(1)地基(2)鋼筋工程(3)鋪電線(4)粉刷; 「如果」要蓋一座房子,首先要找乙個建築公司或工程
承包商(指揮者)。承包商指揮工人(具體建造者)過來造房子(產品),最後驗收。
萬上面示例是builder模式的常規用法,導演類director在builder模式史具有很重要的作用,它用於指導具體構建者如何構建產品,控制呼叫先後次序,並向呼叫者返回完整的產品類,但是有些情況下需要簡化系統結構,可以把director和抽象建造者進行結合。
通過靜態內部類方式實現零件無序裝配構造,這種方式使用更加靈活,更符合定義。內部有複雜物件的預設實現,使用時可以根據使用者需求自由定義更改內容,並且無需改變具體的構造方式。就可以生產出不同複雜產品
比如:比如麥當勞的**,服務員(具體建造者)可以隨意搭配任意幾種產品(零件)組成一款**(產品),然後**給客戶。比第一種方式少了指揮者,主要是因為第二種方式把指揮者交給使用者來操作,使得
產品的建立更加簡單靈活。
應用場景:
需要生成的產品物件有複雜的內部結構,這些產品物件具備共性;
隔離複雜物件的建立和使用,並使得相同的建立過程可以建立不同的產品。
適合於乙個具有較多的零件(屬性)的產品(物件)的建立過程。
建造者與抽象工廠模式的比較:
與抽象工廠模式相比,建造者模式返回乙個組裝好的完整產品,而抽象工廠模式返回一系列相關的產品,這些產品位於不同的產品等級結構,構成了乙個產品族。在抽象工廠模式中,客戶端例項化工廠類,然後呼叫工廠方法獲取所需產品物件,而在建造者模式中,客戶端可以不直接呼叫建造者的相關方法,而是通過指揮者類來指導如何生成物件,包括物件的組裝過程和建造步驟,它側重於一步步構造乙個複雜物件,返回乙個完整的物件。
如果將抽象工廠模式看成汽車配件生產工廠,生產乙個產品族的產品,那麼建造者模式就是乙個汽車組裝工廠,通過對部件的組裝可以返回一輛完整的汽車!
建造者模式
1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...
建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
建造者模式
建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...