動機
在軟體系統中,有時候面臨著「乙個複雜物件」的建立工作,其通常由各個部分的子物件用一定的演算法構成;由於需求的變化,這個複雜物件的各個部分經常面臨著劇烈的變化,但是將它們組合在一起的演算法卻相對穩定。
如何應對這種變化?如何提供一種「封裝機制」來隔離出「複雜物件的各個部分」的變化,從而保持系統中的「穩定構建演算法」不隨著需求改變而改變?
定義
將乙個複雜物件的構建與其表示相分離,使得同樣的構建過程(穩定)可以建立不同的表示(變化)。
——《設計模式》gof
結構
示例
class house;
//builder
class housebuilder
virtual ~housebuilder(){}
protected:
house* phouse;
virtual void buildpart1()=0;
virtual void buildpart2()=0;
virtual void buildpart3()=0;
virtual void buildpart4()=0;
virtual void buildpart5()=0; };
class stonehouse: public house;
//concretebuilder
class stonehousebuilder: public housebuilder
virtual void buildpart2()
virtual void buildpart3()
virtual void buildpart4()
virtual void buildpart5()
};//director
class housedirector
house* construct()
bool flag=phousebuilder->buildpart3();
if(flag)
phousebuilder->buildpart5();
return phousebuilder->getresult();}};
總結1.乙個複雜物件是由多個部件組成的,建造者模式是把複雜物件的建立和部件的建立分別開來,分別用builder類和director類來表示。用director構建最後的複雜物件,而在上面builder介面中封裝的是建立部件的方法(複雜物件是由這些部件組成的),也就是說,director負責如何將部件最後組裝成產品。這樣建造者模式就讓設計和實現解耦了。
2.變化點在**,封裝**—— builder模式主要在於應對「複雜對
象各個部分」的頻繁需求變動。其缺點在於難以應對「分步驟構建
演算法」的需求變動。
C 模式設計之Builder
c 模式設計之builder 2002 07 30 com集中營 一 功能 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。二 結構圖 各類之間的互動關係如下圖所示 三 示例 namespace designpattern builder class product2 cl...
Builder設計模式
builder設計模式一般會採用鏈式程式設計結構 案例分析?構建一台電腦 記憶體 cpu 顯示卡等等 記憶體 r am 執行記憶體 和 rom 非執行記憶體 分為了一些角色 builder 抽象類 規範產品組裝 案例中builder介面 concratebuilder 具體組裝產品類 案例macbo...
Builder設計模式
當乙個類需要過載多個構造方法時,並且引數隨機使用時,builder模式就出現了。官方說法 將乙個複雜的物件的構建與他的表示相分離,使用者可以一步一步構建乙個比較複雜的物件。自己理解 先通過某種方式取得構造物件所需要的所有引數,再通過這些引數一次性構建這個物件。實現如下 package com.dem...