创建型模式四之Builder

来源:互联网 发布:360摄像头软件下载 编辑:程序博客网 时间:2024/06/06 12:53

1. UML



2. 意图:讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

3. code

Builder.h

//Builder.h#ifndef _BUILDER_H_#define _BUILDER_H_#include <string>using namespace std;class Product;class Builder{public:virtual ~Builder();virtual void BuildPartA(const string& buildPara) = 0;virtual void BuildPartB(const string& buildPara) = 0;virtual void BuildPartC(const string& buildPara) = 0;virtual Product* GetProduct() = 0;protected:Builder();private:};class ConcreteBuilder:public Builder{public:ConcreteBuilder();~ConcreteBuilder();void BuildPartA(const string& buildPara);void BuildPartB(const string& buildPara);void BuildPartC(const string& buildPara);Product* GetProduct();};#endif //~_BUILDER_H_

Builder.cpp

//Builder.cpp#include "Builder.h"#include "Product.h"#include <iostream>using namespace std;Builder::Builder(){}Builder::~Builder(){}ConcreteBuilder::ConcreteBuilder(){}ConcreteBuilder::~ConcreteBuilder(){}void ConcreteBuilder::BuildPartA(const string& buildPara){cout<<"Step1:Build PartA..."<<buildPara<<endl;}void ConcreteBuilder::BuildPartB(const string& buildPara){cout<<"Step1:Build PartB..."<<buildPara<<endl;}void ConcreteBuilder::BuildPartC(const string& buildPara){cout<<"Step1:Build PartC..."<<buildPara<<endl;}Product* ConcreteBuilder::GetProduct(){BuildPartA("pre-defined");BuildPartB("pre-defined");BuildPartC("pre-defined");return new Product();}

Director.h

//Director.h#ifndef _DIRECTOR_H_#define _DIRECTOR_H_class Builder;class Director{public:Director(Builder* bld);~Director();void Construct();protected:private:Builder* _bld;};#endif //~_DIRECTOR_H_

Director.cpp

//Director.cpp#include "director.h"#include "Builder.h"Director::Director(Builder* bld){_bld = bld;}Director::~Director(){}void Director::Construct(){_bld->BuildPartA("user-defined");_bld->BuildPartB("user-defined");_bld->BuildPartC("user-defined");}

Product.h

//Product.h#ifndef _PRODUCT_H_#define _PRODUCT_H_class Product{public:Product();~Product();};#endif //~_PRODUCT_H_

Product.cpp

#include "Product.h"Product::Product(){}Product::~Product(){}

main.cpp

//main.cpp#include "Builder.h"#include "Product.h"#include "Director.h"#include <iostream>using namespace std;int main(int argc,char* argv[]){Builder *buider = new ConcreteBuilder();Director* director = new Director(buider);director->Construct();delete buider;delete director;return 0;}


原创粉丝点击