意圖:將乙個複雜物件的建立與它的表示分離,使得同樣的構建過程可以建立不同的表示。
適用性:1.當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。
2.當構建過程必須允許被構建的物件有不同的表示時。
效果: 1.使得可以改變乙個產品的內部表示。
2.隱藏產品的內部結構。
3.使得構造**和表示**分離。
4.使得可以對構建過程進行更精確的控制。
**例項:
**以構建room為例項,而room由四個site組成,site可以是wall、window、door、grass、wood。(其中
wood和grass分別表示木製牆和玻璃牆). 這裡room可以有3 wall 1 door 或 2 wall 1 door 1 window等各種
表示。構建在具體builder中實現,而在director中表示,體現了效果3.
在builder標頭檔案下,首先我們建立各種要用到的類:
1要用到的類#ifndef _builder_
2#define _builder_
3 #include
4 #include 5
using
namespace
std;
6const
int maxsite = 4;7
8class
site
11string
_mname;
12};
1314
class wall:public
site
17};
1819
class wood:public
site
22};
2324
class grass:public
site
27};
2829
class door:public
site
32};
3334
class window:public
site
37};
3839
class
room
45void
printf()
4652
}53 site*_msite[maxsite];
54 };
接著我們建立absbuilder,這裡提供給嚮導器乙個構造產品的抽象介面。因為不知道具體哪個類被建立並用於組成目標類,所以達到了效果2.
class然後是具體建立buildera/b...,體現了可以改變產品的內部表示(效果1.)absbuilder
virtual
void
builderwall(){}
virtual
void
builderdoor(){}
virtual
void
builderwindow(){}
virtual
void
buildergrass(){}
virtual
void
builderwood(){}
virtual room* getroom() = 0
;};
class buildera:publicbuildera/babsbuilder
virtual
void builderwall()
virtual
void builderdoor()
virtual
void
builderwindow()
virtual room* getroom()
private
: room*_mproom;
int_mnum;
};class builderb:public
absbuilder
virtual
void builderwood()
virtual
void builderdoor()
virtual
void
builderwindow()
virtual room* getroom()
private
: room*_mproom;
int_mnum;
};#endif
在director標頭檔案下,建立類director. 因為這裡一步步構造產品,體現了效果4.
classmain函式中:director
void
construct()
private
: absbuilder*_mbuilder;
};
#include usingnamespace
std;
#include
"builder.h
"#include
"director.h
"int
main()
生成器模式
閱讀 研磨設計模式 筆記。之後若有所感,再補充。生成器模式目的 將乙個複雜的物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。示例 description 描述輸出到檔案頭的物件 author liuwei date 2014 4 17 version 1.0 public class...
生成器模式
生成器模式的定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。我們先來看乙個簡單的例子,比如說product類是乙個複雜的類,構建它需要許多步驟 class product 我們需要定義乙個抽象的生成器類builder,來定義構建product的步驟 abstract ...
生成器模式
定義 將乙個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。生成器模式利用乙個導演者物件和具體建造者物件乙個乙個地建造出所有的零件,從而建造出完整的物件。四個要素 builder 生成器介面,定義建立乙個product物件所需要的各個部件的操作。concretebuilder 具...