天天看點

設計模式之禅之設計模式-建造者模式

一:建造者模式的定義

        --->建造者模式(Builder Pattern)也叫做生成器模式,其定義如下:将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示

        ● Product産品類

                通常是實作了模闆方法模式,也就是有模闆方法和基本方法,這個參考模闆方法模式。例子中的BenzModel和BMWModel就屬于産品類。

        ● Builder抽象建造者

                規範産品的組建,一般是由子類實作。例子中的CarBuilder就屬于抽象建造者。

        ● ConcreteBuilder具體建造者

                實作抽象類定義的所有方法,并且傳回一個組建好的對象。例子中的BenzBuilder和BMWBuilder就屬于具體建造者。

        ● Director導演類

                負責安排已有子產品的順序,然後告訴Builder開始建造

二:建造者模式的優點

        ● 封裝性

                使用建造者模式可以使用戶端不必知道産品内部組成的細節,如例子中我們就不需要關心每一個具體的模型内部是如何實作的,産生的對象類型就是CarModel。

        ● 建造者獨立,容易擴充

                BenzBuilder和BMWBuilder是互相獨立的,對系統的擴充非常有利。

        ● 便于控制細節風險

                由于具體的建造者是獨立的,是以可以對建造過程逐漸細化,而不對其他的子產品産生任何影響。

三:建造者模式的使用場景

        ● 相同的方法,不同的執行順序,産生不同的事件結果時,可以采用建造者模式。

        ● 多個部件或零件,都可以裝配到一個對象中,但是産生的運作結果又不相同時,則可以使用該模式。

        ● 産品類非常複雜,或者産品類中的調用順序不同産生了不同的效能,這個時候使用建造者模式非常合适。

        ● 在對象建立過程中會使用到系統中的一些其他對象,這些對象在産品對象的建立過程中不易得到時,也可以采用建造者模式封裝該對象的建立過程。該種場景隻能是一個補償方法,因為一個對象不容易獲得,而在設計階段竟然沒有發覺,而要通過建立者模式柔化建立過程,本身已經違反設計的最初目标。

四:建造者模式的注意事項

        --->建造者模式關注的是零件類型和裝配工藝(順序),這是它與工廠方法模式最大不同的地方,雖然同為建立類模式,但是注重點不同。

        --->這個建造者模式和工廠模式非常相似呀,是的,非常相似,但是記住一點你就可以遊刃有餘地使用了:建造者模式最主要的功能是基本方法的調用順序安排,也就是這些基本方法已經實作了,通俗地說就是零件的裝配,順序不同産生的對象也不同;而工廠方法則重點是建立,建立零件是它的主要職責,組裝順序則不是它關心的。

        --->再次說明,在使用建造者模式的時候考慮一下模闆方法模式,别孤立地思考一個模式,僵化地套用一個模式會讓你受害無窮!

五:建造者模式的例子

模闆方法模式的模闆算法抽象類

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

View Code

奔馳算法類

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

寶馬算法類

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

建造者模式的建造抽象類

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

奔馳算法建造類實作

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

寶馬算法建造類實作    

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

導演類  

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

用戶端測試類

設計模式之禅之設計模式-建造者模式
設計模式之禅之設計模式-建造者模式

繼續閱讀