设计模式:建造者模式
2016-01-26 12:58
316 查看
建造者模式:
1 建造一个对象,这个对象是由复杂的部件构成,但它需要哪几个部件是固定的,每种部件的生产方式不固定。
2 建造者模式将对象的生产和部件的生产分离开,分别用Director类和Builder类来实现。
比如组装一个机器人人,他需要6个部分,头,双手,双脚,躯干,我们先把这6个部分生产出来,最后把6各部分组装在一起。
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派生出不同的子类。
相关文章推荐
- 为table-row设置border无效解决办法
- hdu 2328 Corporate Identity
- 验证邮箱的正则
- bat 自动执行 SVN 命令
- 动态更新约束问题(SnapKit 的使用)
- AngularJS系列:4、HTML编译器
- for,foreach,iterator的用法和区别
- Spring中PropertyPlaceholderConfigurer的使用
- How does a relational database work
- Java基础知识点2:hashCode()方法
- AFNetworking判断网络状态
- 高性能计算知识汇总
- CodeForces 617A Elephant
- exchange 2010连接器解释
- [Latex] natbib package to cite references
- HVR安装配置步骤
- MaterialRefreshLayout实现下拉刷新上拉加载更多
- 理解SVN中trunk,branches,tags
- canvas绘制简单图形
- hdu 2502 月之数