builder模式

来源:互联网 发布:重庆正规网络整合营销 编辑:程序博客网 时间:2024/06/06 06:43
// Builder.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "Builder.h"#include "Product.h"#include "Director.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){Director *d = new Director(new ConcreteBuilder());d->Construct();while(true);return 0;}

#ifndef_DIRECTOR_H_#define _DIRECTOR_H_class Builder;class Director{public:Director(Builder * bld);~Director();void Construct();protected:private:Builder * _bld;};#endif

#include "stdafx.h"#include "Director.h"#include "Builder.h"Director::Director(Builder * bld){_bld = bld;}Director::~Director(){}void Director::Construct(){_bld->GetProduct();_bld->BuilderPartA("user-defined");_bld->BuilderPartB("user-defined");_bld->BuilderPartC("user-defined");}

#ifndef  _BUILDER_H_#define _BUILDER_H_#include <string>using namespace std;class ProductBuilder;class Builder{public:virtual ~Builder();virtual void BuilderPartA(const string & buildPara) = 0;virtual void BuilderPartB(const string & buildPara) = 0;virtual void BuilderPartC(const string & buildPara) = 0;virtual ProductBuilder * GetProduct() = 0;protected:Builder();private:};class ConcreteBuilder:public Builder{public:ConcreteBuilder();~ConcreteBuilder();void BuilderPartA(const string & buildPara);void BuilderPartB(const string & buildPara);void BuilderPartC(const string & buildPara);ProductBuilder *GetProduct();protected:private:};#endif

#include "stdafx.h"#include "Builder.h"#include "Product.h"#include <iostream>using namespace std;Builder::Builder(){}Builder::~Builder(){}ConcreteBuilder::ConcreteBuilder(){}ConcreteBuilder::~ConcreteBuilder(){}void ConcreteBuilder::BuilderPartA(const string & buildPara){cout<<"step1:partA..."<<buildPara<<endl;}void ConcreteBuilder::BuilderPartB(const string & buildPara){cout<<"step1:partB..."<<buildPara<<endl;}void ConcreteBuilder::BuilderPartC(const string & buildPara){cout<<"step1:partC..."<<buildPara<<endl;}ProductBuilder *ConcreteBuilder::GetProduct(){BuilderPartA("pre-defined");BuilderPartB("pre-defined");BuilderPartC("pre-defined");return new ProductBuilder();}

#ifndef  _PRODUCT_H_#define _PRODUCT_H_class ProductBuilder{public:ProductBuilder();~ProductBuilder();void ProducePart();protected:private:};class ProductPart{public:ProductPart();~ProductPart();ProductPart *BuilderPart();protected:private:};#endif

#include "stdafx.h"#include "Product.h"#include <iostream>using namespace std;ProductBuilder::ProductBuilder(){ProducePart();cout<<"return a product"<<endl;}ProductBuilder::~ProductBuilder(){}void ProductBuilder::ProducePart(){cout<<"build part of product.."<<endl;}ProductPart::ProductPart(){}ProductPart::~ProductPart(){}ProductPart *ProductPart::BuilderPart(){return new ProductPart;}

0 0