[code]
class
Builder;
class
Product{
public
:
void
AddPart(
const
char
*info){
m_PartInfoVec.push_back(info);
}
void
ShowProduct(){
for
(std::vector<
const
char
*>::iterator item = m_PartInfoVec.begin(); item != m_PartInfoVec.end(); ++item){
std::cout << *item << std::endl;
}
}
private
:
std::vector<
const
char
*> m_PartInfoVec;
};
class
Builder{
public
:
virtual
void
BuildPartA(){}
virtual
void
BuildPartB(){}
virtual
Product* GetProduct() {
return
NULL;}
};
class
ConcreteBuilder:
public
Builder{
public
:
ConcreteBuilder(){ m_Product =
new
Product(); }
void
BuildPartA(){
m_Product->AddPart(
"PartA completed"
);
}
void
BuildPartB(){
m_Product->AddPart(
"PartB q"
);
}
Product* GetProduct(){
return
m_Product;
}
private
:
Product *m_Product;
};
class
Director{
public
:
Director(Builder *builder) { m_Builder = builder; }
void
CreateProduct(){
m_Builder->BuildPartA();
m_Builder->BuildPartB();
}
private
:
Builder *m_Builder;
};