您的位置:首页 > 其它

设计模式:建造者模式

2016-01-26 12:58 316 查看
建造者模式:

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派生出不同的子类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: