Product.h
// // Product.h // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #ifndef _PRODUCT_H_ #define _PRODUCT_H_ class Product { public: Product(); ~Product(); void ProducePart(); protected: private: }; class ProductPart { public: ProductPart(); ~ProductPart(); ProductPart* BuildPart(); protected: private: }; #endif //~_PRODUCT_H_
Product.cpp
// // Product.cpp // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #include "Product.h" Product::Product() { } Product::~Product() { } ProductPart::ProductPart() { } ProductPart::~ProductPart() { }
Builder.h
// // Builder.h // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #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(); protected: private: }; #endif //~_BUILDER_H
Builder.cpp
// // Builder.cpp // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #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:BuildPartA..."<<buildPara<<endl; } void ConcreteBuilder::BuildPartB(const string& buildPara) { cout<<"Step2:BuildPartB..."<<buildPara<<endl; } void ConcreteBuilder::BuildPartC(const string& buildPara) { cout<<"Step3:BuildPartC..."<<buildPara<<endl; } Product* ConcreteBuilder::GetProduct() { BuildPartA("pre-defined"); BuildPartB("pre-defined"); BuildPartC("pre-defined"); return new Product(); }
Director.h
// // Director.h // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #ifndef _DIRECTOR_H_ #define _DIRECTOR_H_ class Builder; class Director { public: Director(Builder* hld); ~Director(); void Construct(); protected: private: Builder* _bld; }; #endif //~_DIRECTOR_H_
Director.cpp
// // Director.cpp // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #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"); }
main.cpp
// // main.cpp // Builder // // Created by Cheney Shen on 11-2-20. // Copyright 2011年 __MyCompanyName__. All rights reserved. // #include "Builder.h" #include "Product.h" #include "Director.h" #include <iostream> using namespace std; int main (int argc, const char * argv[]) { Director* d = new Director(new ConcreteBuilder()); d->Construct(); return 0; }