Builder模式是将复杂对象的构建和他的表示分离,使得同样的创建过程可以创建不通的表示;其结构图为:
示例代码为:
class Product1{};
class Product2{};
class Builder{
public:
virtual void BuilderPartA();
virtual void BuilderPartB();
virtual void BuilderPartC();
Builder();
virtual ~Builder();
};
class ConcreteBuilder1:public Builder{
public:
ConcreteBuilder1():_product(NULL){};
virtual ~ConcreteBuilder1();
void BuilderPartA(){};
void BuilderPartB(){};
void BuilderPartC(){};
virtual Product1* GetProduct1(){return _product;}//返回创建的Product1对象指针
private:
Product1* _product;
};
class ConcreteBuilder2:public Builder{
public:
ConcreteBuilder2():_product(NULL){}
virtual ~ConcreteBuilder2();
void BuilderPartA(){};
void BuilderPartB(){};
void BuilderPartC(){};
virtual Product2* GetProduct2(){return _product;}//返回创建的錚roduct对象指针
private:
Product2* _product;
};
class Director{
public:
Director();
~Director();
void Construct(Builder* _builder)
{
_builder->BuilderPartA();
_builder->BuilderPartB();
_builder->BuilderPartC();
}
};
int main(int argc, char** argv)
{
Director director;
ConcreteBuilder1* pBuilder1 = new ConcreteBuilder1();
director.Construct(pBuilder1);
Product1* pProduct1 = pBuilder1->GetProduct1();
ConcreteBuilder2* pBuilder2 = new ConcreteBuilder2();
director.Construct(pBuilder2);
Product2* pProduct2 = pBuilder2->GetProduct2();
return 1;
}