設計模式3(建造者模式)
建造者模式的目的是,當我們創建比較複雜的對象時,需要將這個對象的創建和對象的表示分離開來,由於在每一步的構造過程中可以映入不同參數,所以步驟相同但是最後的對象卻不一樣。也就是說將產品的內部表象和產品的生成過程分割開來,從而使一個建造過程生成具有不同的內部表象的產品對象。
#include
using namespace std;
class PCBuilder
{
public:
virtual void prepareMonitor()=0;
virtual void prepareCpu()=0;
virtual void prepareDisk()=0;
PCBuilder *GetProduct(){return product;}
private:
PCBuilder *product;
};
class CheapPCBuilder:public PCBuilder
{
public:
void prepareMonitor()
{cout<<"cheap"prepareCpu();
builder->prepareDisk();
}
};
void main()
{
Director* dir;
PCBuilder* pd=new DearPCBuilder();
dir->construct(pd);
}
實現要點
1、建造者模式主要用於“分步驟構建一個複雜的對象”,在這其中“分步驟”是一個穩定的算法,而複雜對象的各個部分則經常變化。
2、產品不需要抽象類,特別是由於創建對象的算法複雜而導致使用此模式的情況下或者此模式應用於產品的生成過程,其最終結果可能差異很大,不大可能提煉出一個抽象產品類。
3、創建者中的創建子部件的接口方法不是抽象方法而是空方法,不進行任何操作,具體的創建者只需要覆蓋需要的方法就可以,但是這也不是絕對的,特別是類似文本轉換這種情況下,缺省的方法將輸入原封不動的輸出是合理的缺省操作。
4、前面我們說過的抽象工廠模式(Abtract Factory)解決“系列對象”的需求變化,Builder模式解決“對象部分”的需求變化,建造者模式常和組合模式(Composite Pattern)結合使用。
效果
1、建造者模式的使用使得產品的內部表象可以獨立的變化。使用建造者模式可以使客戶端不必知道產品內部組成的細節。
2、每一個Builder都相對獨立,而與其它的Builder無關。
3、可使對構造過程更加精細控制。
4、將構建代碼和表示代碼分開。
5、建造者模式的缺點在於難於應付“分步驟構建算法”的需求變動。
適用性
以下情況應當使用建造者模式:
1、需要生成的產品對象有複雜的內部結構。
2、需要生成的產品對象的屬性相互依賴,建造者模式可以強迫生成順序。
3、 在對象創建過程中會使用到系統中的一些其它對象,這些對象在產品對象的創建過程中不易得到。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.