您的位置:首页 > 产品设计 > UI/UE

Builder Pattern(建造者模式)

2015-05-06 11:24 176 查看
/*Product.h*/
#ifndef PRODUCT_H
#define PRODUCT_H

class Product
{
public:
Product();
~Product();
protected:
private:
};
#endif


/*Product.cpp*/
#include "Product.h"

Product::Product()
{
}

Product::~Product()
{
}


/*Builder.h*/
#ifndef BUILDER_H
#define BUILDER_H
#include <string>

class Builder
{
public:
virtual ~Builder();
virtual void BuildPartA(const string &build_para)=0;
virtual void BuildPartB(const string &build_para)=0;
virtual void BuildPartC(const string &build_para)=0;
virtual Product *GetProduct()=0;
protected:
Builder();
private:
};

class ConcreteBuilder:public Builder
{
public:
ConcreteBuilder();
~ConcreteBuilder();
void BuilderPartA(const string &build_para);
void BuilderPartB(const string &build_para);
void BuilderPartC(const string &build_para);
Product *GetProduct();
};
#endif


/*Builder.cpp*/
#include "Builder.h"
#include "Product.h"
#include <iostream>

Builder::Builder()
{
}

Builder::~Builder()
{
}

ConcreteBuilder::ConcreteBuilder()
{
}

ConcreteBuilder::~ConcreteBuilder()
{
}

ConcreteBuilder::BuildPartA(const string &build_para)
{
std::cout<<build_para<<std::endl;
}

ConcreteBuilder::BuildPartB(const string &build_para)
{
std::cout<<build_para<<std::endl;
}

ConcreteBuilder::BuildPartC(const string &build_para)
{
std::cout<<build_para<<std::endl;
}

ConcreteBuilder *ConcreteBuilder::GetProduct()
{
BuildPartA("DefinedA");
BuildPartB("DefinedB");
BuildPartC("DefinedC");
return new Product();
}


/*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.cpp*/
#include "Diretor.h"
#include "Builder.h"

Director::Director(Builder *bld)
{
bld_=bld;
}

Director::~Director()
{
}

void Director::Construct()
{
bld_->BuildPartA("Defined");
bld_->BuildPartB("Defined");
bld_->BuildPartC("Defined");
}


/*main.cpp*/
#include <iostream>
#include "Product.h"
#include "Builder.h"
#include "Director.h"

int main()
{
Director *d=new Director(new ConcreteBuilder());
d->Construct();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: