建造者(builder)模式的定義:指將乙個複雜物件的構造與它的表示分離,使同樣的構建過程可以建立不同的表示,這樣的設計模式被稱為建造者模式。它是將乙個複雜的物件分解為多個簡單的物件,然後一步一步構建而成。它將變與不變相分離,即產品的組成部分是不變的,但每一部分是可以靈活選擇的。
該模式的主要優點如下:
封裝性好,構建和表示分離。
擴充套件性好,各個具體的建造者相互獨立,有利於系統的解耦。
客戶端不必知道產品內部組成的細節,建造者可以對建立過程逐步細化,而不對其它模組產生任何影響,便於控制細節風險。
其缺點如下:
產品的組成部分必須相同,這限制了其使用範圍。
如果產品的內部變化複雜,如果產品內部發生變化,則建造者也要同步修改,後期維護成本較大。
建造者(builder)模式和工廠模式的關注點不同:建造者模式注重零部件的組裝過程,而工廠方法模式更注重零部件的建立過程,但兩者可以結合使用。
建造者(builder)模式由產品、抽象建造者、具體建造者、指揮者等 4 個要素構成,現在我們來分析其基本結構和實現方法。
1. 模式的結構
建造者(builder)模式的主要角色如下。
產品角色(product):它是包含多個組成部件的複雜物件,由具體建造者來建立其各個零部件。
抽象建造者(builder):它是乙個包含建立產品各個子部件的抽象方法的介面,通常還包含乙個返回複雜產品的方法 getresult()。
具體建造者(concrete builder):實現 builder 介面,完成複雜產品的各個部件的具體建立方法。
指揮者(director):它呼叫建造者物件中的部件構造與裝配方法完成複雜物件的建立,在指揮者中不涉及具體產品的資訊。
其結構圖如圖 1 所示。
2. 模式的實現
class(2) 抽象建造者:包含建立產品各個子部件的抽象方法。product
public
void
setpartb(string partb)
public
void
setpartc(string partc)
public
void
show()
}
abstract(3) 具體建造者:實現了抽象建造者介面。class
builder
}
public(4) 指揮者:呼叫建造者中的方法完成複雜物件的建立。class concretebuilder extends
builder
public
void
buildpartb()
public
void
buildpartc()
}
class(5) 客戶類。director
//產品構建與組裝方法
public
product construct()
}
publicclass
client
}
建造者模式
1.定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。2.uml 類圖 結構 該結構 演示了複雜物件被一步一步建立的建造者模式。builder pattern structural example using system using system.collection...
建造者模式
軟體領域中的設計模式為開發人員提供了一種使用專家設計經驗的有效途徑。設計模式中運用了物件導向程式設計語言的重要特性 封裝 繼承 多型,真正領悟設計模式的精髓是可能乙個漫長的過程,需要大量實踐經驗的積累。最近看設計模式的書,對於每個模式,用c 寫了個小例子,加深一下理解。主要參考 大話設計模式 和 設...
建造者模式
建造者模式將複雜物件的構建和它的表示分離,使同樣的構建過程能夠構建出不同的表示。以乙個建造小人為例子,可以建造2種小人,胖子和瘦子 include using namespace std class builder 抽象建造者類 class buildthinman public builder 瘦...