生成器模式 Builder C 實現

2022-08-05 08:30:29 字數 2596 閱讀 9426

意圖:將乙個複雜物件的建立與它的表示分離,使得同樣的構建過程可以建立不同的表示。

適用性: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

absbuilder

virtual

void

builderwall(){}

virtual

void

builderdoor(){}

virtual

void

builderwindow(){}

virtual

void

buildergrass(){}

virtual

void

builderwood(){}

virtual room* getroom() = 0

;};

然後是具體建立buildera/b...,體現了可以改變產品的內部表示(效果1.)

class buildera:public

absbuilder

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

buildera/b

在director標頭檔案下,建立類director. 因為這裡一步步構造產品,體現了效果4.

class

director

void

construct()

private

: absbuilder*_mbuilder;

};

main函式中:

#include using

namespace

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 具...