- #include<iostream>
- 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"<<endl;}
- void prepareCpu()
- {}
- void prepareDisk()
- {}
- };
- class DearPCBuilder:public PCBuilder
- {
- public:
- void prepareMonitor()
- {cout<<"Dear"<<endl;}
- void prepareCpu()
- {}
- void prepareDisk()
- {}
- };
- class Director
- {
- public:
- void construct(PCBuilder* builder)
- {
- builder->prepareMonitor(); //一般來說,程序員可以在此處傳入參數,本程序省略。
- builder->prepareCpu();
- builder->prepareDisk();
- }
- };
- void main()
- {
- Director* dir;
- PCBuilder* pd=new DearPCBuilder();
- dir->construct(pd);
- }
c++設計模式之四:Builder Pattern
Builder模式要解決的問題是,當我們要創建很複雜的對象時,有時候需要將複雜對象的創建過程和這個對象的表示分離開來。由於在每一步的構造過程中可以映入不同參數,所以步驟相同但是最後的對象卻不一樣。也就是說將產品的內部表象和產品的生成過程分割開來,從而使一個建造過程生成具有不同的內部表象的產品對象。
Builder模式的關鍵在於在創建一個複雜對象時,其組合過程往往涉及複雜的處理,同時,這種職責的分離使得修改複雜對象的組合邏輯變得獨立而簡單。
Builder模式的典型結構圖爲:
代碼如下:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.