建造者模式:
1 建造一个对象,这个对象是由复杂的部件构成,但它需要哪几个部件是固定的,每种部件的生产方式不固定。
2 建造者模式将对象的生产和部件的生产分离开,分别用Director类和Builder类来实现。
比如组装一个机器人人,他需要6个部分,头,双手,双脚,躯干,我们先把这6个部分生产出来,最后把6各部分组装在一起。
#include<iostream>
using namespace std;
class Product{
public:
virtual void part1(){}
virtual void part2(){}
virtual void part3(){}
};
class ConcreteProduct1: public Product{
public:
virtual void part1(){
cout<<"I need part1 of ConcreteProduct1"<<endl;
}
virtual void part2(){
cout<<"I need part2 of ConcreteProduct1"<<endl;
}
virtual void part3(){
cout<<"I need part3 of ConcreteProduct1"<<endl;
}
};
class ConcreteProduct2: public Product{
public:
virtual void part1(){
cout<<"I need part1 of ConcreteProduct2"<<endl;
}
virtual void part2(){
cout<<"I need part2 of ConcreteProduct2"<<endl;
}
virtual void part3(){
cout<<"I need part3 of ConcreteProduct2"<<endl;
}
};
class Builder{
public:
virtual void buildPart1(){}
virtual void buildPart2(){}
virtual void buildPart3(){}
};
class ConcreteBuilder1:public Builder{
public:
ConcreteBuilder1(){
mpProduct=new ConcreteProduct1();
}
virtual void buildPart1(){
mpProduct->part1();
cout<<"Build Part1 of ConcreteBuilder1"<<endl;
}
virtual void buildPart2(){
mpProduct->part2();
cout<<"Build Part2 of ConcreteBuilder1"<<endl;
}
virtual void buildPart3(){
mpProduct->part3();
cout<<"Build Part3 of ConcreteBuilder1"<<endl;
}
private:
Product* mpProduct;
};
class ConcreteBuilder2:public Builder{
public:
ConcreteBuilder2(){
mpProduct=new ConcreteProduct2();
}
virtual void buildPart1(){
mpProduct->part1();
cout<<"Build Part1 of ConcreteBuilder2"<<endl;
}
virtual void buildPart2(){
mpProduct->part2();
cout<<"Build Part2 of ConcreteBuilder2"<<endl;
}
virtual void buildPart3(){
mpProduct->part3();
cout<<"Build Part3 of ConcreteBuilder2"<<endl;
}
private:
Product* mpProduct;
};
class Director{
public:
Director(Builder* pBuilder){
mpBuilder=pBuilder;
}
void createProduct(){
mpBuilder->buildPart1();
mpBuilder->buildPart2();
mpBuilder->buildPart3();
}
private:
Builder* mpBuilder;
};
int main(){
Builder* pBuilder=new ConcreteBuilder1();
Director* pDirector=new Director(pBuilder);
pDirector->createProduct();
}
Director负责组装各个部分;Builder负责各个部分的生产,生产不同的产品需要Builder派生出不同的子类。