這段時間剛好要觀摩持久層框架mybatis,恰好看到mybatis 複雜的工廠物件 sqlsessionfactory 的生成類 sqlsessionfactorybuilder 。不禁想起gof 23種設計模式中的建造者模式。
對照現實中,你去買車時只需知道你要買車的型別,便可到店中購得心滿意足的產品,而無需自己將發動機、輪胎等一一組裝。對普通顧客來說這是乙個及其複雜的過程。而那家「店」正好幫你遮蔽了這一過程,你只需指定相應的型別、顏色......便可得到相應的產品。建造者模式的思想便是如此。
先來看看它的類圖,整個建造者模式的廬山真面目就在這裡面,配合下面的解釋耐心看。
我們來看看它裡面都是些什麼角色,首先看看它們的中心——builder。
1、builder(抽象建造者):抽象建造這為建造乙個產品的各個部件提供指定的介面。一般有兩類方法:1)建造***部件buildepart***();2)獲得建造好的產品getresult()。
2、concretebuilder(具體建造者):實現了builder的各個介面,明確定義了要建造的產品。
3、produce(產品角色):包含了複雜的組成部件,甚至各個屬性間賦值順序非常講究(parta確定了才可確定partb)。
4、director(指揮者):又叫導演類,安排複雜物件的構造次序。像各個屬性間賦值順序非常講究的物件,他的作用便十分明顯了。程式設計師的通病就是懶(其實懶才是發展的動力),每用你乙個包還要去研究你包裡面各個類的實現機制是不現實的。這便是與客戶互動的「店」了。
注:事實上實際的應用中,builder和director是可以省略的(活用知識不要生搬硬套)。它們完全可以整合到具體實現類中,讓它扮演「指揮者」與「建造者「的雙重角色。
看完上面這些,乙個大概的輪廓也差不多在腦海形成了。甚至有接觸過的朋友應該重拾遺失的記憶了。下面再舉乙個簡單的例子。
public class produce
public abstract class builder }
public class director
public void setbuilder(builder builder)
public product construct() }
以上內容均為博主個人心得,如有錯誤望不吝嗇指正,不勝感激。
建立型模式 建造者模式
建造者模式 builder pattern 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。與抽象工廠的區別 在建造者模式裡,有個指導者,由指導者來管理建造者,使用者和指導聯絡,指導者聯絡建造者最後得到產品牌。即建造模式可以強制實現一種分步驟進行的建造過程。建造者模式將複雜...
建立型模式 建造者模式
在開發中經常有些複雜的物件,它們擁有一系列成員屬性,這些成員屬性中有些是引用型別的成員物件。而且在這些複雜物件中,通過不同的屬性生成 不同的物件 比如 汽車 這個物件,通過不同的發動機製造出來之後,都是汽車 但是他的效能,是不同的 建造者模式 builder pattern 將乙個複雜的物件的構建過...
建立型模式 建造者模式
builder 抽象建造者,提供建造產品某部分的方法 concretebuilder 具體建造者,具體來建造產品中的某個部分 director 指揮者,實現建造者模式的介面,選擇具體建造者來建立具體的產品 product 產品 抽象建造者builder.php created by phpstorm...