設計模式builder的C 實現原始碼

2021-05-22 14:40:28 字數 3199 閱讀 8416

1、產品類product定義

#ifndef product_h

#define product_h

#define str_color " color: "

#define str_space " space: "

#define str_other " other: "

class product

;#endif

2、產品類product實現

#include

#include

#include "product.h"

product::product()

void product::buildcolor(char* col)

this->color = col;

}void product::buildspace(int space)

this->space = space;

}void product::buildother(char* other)

char* product::tostring()

int len = strlen(str_color) + strlen(color);

len += strlen(str_space) + strlen(strspace);

len += strlen(str_other) + strlen(other);

res = new char[len + 2];

switch(first)

return res;

}3、構造產品抽象類builder定義

#ifndef builder_h

#define builder_h

#include "product.h"

class builder

;#endif

4、構造產品具體類concretebuilder0定義

#ifndef concretebuilder0_h

#define concretebuilder0_h

#include "builder.h"

class concretebuilder0 : public builder

;#endif

5、構造產品具體類concretebuilder0實現

#include

#include

#include "concretebuilder0.h"

concretebuilder0::concretebuilder0()

concretebuilder0::~concretebuilder0()

}void concretebuilder0::createparta(char* col, int spac)

p->buildcolor(col);

p->buildspace(spac);

}void concretebuilder0::createpartb(char* col, int spac)

char stmp[3];

sprintf(stmp,"%d",spac);

int len = strlen(col) + strlen(" ") + strlen(stmp);

char* tmp = new char[len];

strcpy(tmp, col);

strcat(tmp," ");

strcat(tmp, stmp);

p->buildother(tmp);

}product* concretebuilder0::getproduct()

6、構造產品具體類concretebuilder1定義

#ifndef concretebuilder1_h

#define concretebuilder1_h

#include "builder.h"

class concretebuilder1 : public builder

;#endif

7、構造產品具體類concretebuilder1實現

#include

#include

#include "concretebuilder1.h"

concretebuilder1::concretebuilder1()

concretebuilder1::~concretebuilder1()

}void concretebuilder1::createparta(char* col, int spac)

p->buildspace(spac);

p->buildcolor(col);

}void concretebuilder1::createpartb(char* col, int spac)

char stmp[3];

sprintf(stmp,"%d",spac);

int len = strlen(col) + strlen(" ") + strlen(stmp);

char* tmp = new char[len];

strcpy(tmp, stmp);

strcat(tmp," ");

strcat(tmp, col);

p->buildother(tmp);

}product* concretebuilder1::getproduct()

8、定義構造產品類的director類定義

#ifndef director_h

#define director_h

#include "builder.h"

class director

;#endif

9、定義構造產品類的director類實現

#include

#include "director.h"

void director::createproduct(builder* b)

b->createparta("red",5);

b->createpartb("blue",12);

}10、客戶使用類client實現

#include

#include "product.h"

#include "concretebuilder0.h"

#include "builder.h"

#include "director.h"

#include "concretebuilder1.h"

int main()

c 設計模式 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...