建造者模式(Builder Pattern)
flyfish 2016-1-22
C++实现
class Product
{
public:
void DoSomething(){}
};
class Builder
{
public:
virtual void SetPart1(){};//处理Product的第一部分
virtual void SetPart2(){};//处理Product的第二部分
virtual Product* GetProduct(){return nullptr;}//product生成之后,经过SetPart1,SetPart2处理,最后返回结果
};
//A和B 中的SetPart1,SetPart2不同
class ConcreteProductA: public Builder
{
public:
ConcreteProductA(){product_=new Product();}
void SetPart1(){}//产品内的逻辑处理
void SetPart2(){}//
Product* GetProduct(){return product_;}//
private:
Product* product_;
};
class ConcreteProductB: public Builder
{
public:
ConcreteProductB(){product_=new Product();}
void SetPart1(){}//产品内的逻辑处理
void SetPart2(){}
Product* GetProduct(){return product_;}
private:
Product* product_;
};
class Director
{
public:
void ProcessProduct()
{
builder_->SetPart1();
builder_->SetPart2();
}
public:
Director(Builder *builder) { builder_ = builder; }
Builder* builder_;
};
int _tmain(int argc, _TCHAR* argv[])
{
{
Builder *a = new ConcreteProductA();
Director *d= new Director(a);
d->ProcessProduct();
Product* p=a->GetProduct();
p->DoSomething();
}
{
Builder *b = new ConcreteProductB();
Director *d= new Director(b);
d->ProcessProduct();
Product* p=b->GetProduct();
p->DoSomething();
}
return 0;
}