建造者模式(builder)c++版本
来源:互联网 发布:od跳过网络验证 编辑:程序博客网 时间:2024/06/06 00:23
此为大话设计模式中的建造者模式的c++版本
/* * builder.cpp * * Created on: Jul 25, 2017 * Author: clh01s@163.com * 生成器(建造者)模式 * 将一个复杂的对象与它的表示分离, * 使得同样的构建过程可以创建不同的 * 表示. */#include <iostream>#include <string>//创建人的虚基类class PersonBuilder{public: virtual ~PersonBuilder(){} //创建身体部分的纯虚函数 virtual void BuildHead()=0; virtual void BuildBody()=0; virtual void BuildArmLeft()=0; virtual void BuildArmRight()=0; virtual void BuildLegLeft()=0; virtual void BuildLegRight()=0;};class PersonThinBuilder:public PersonBuilder{public: //创建身体的每个部位 void BuildHead() override { std::cout<<"创建瘦子的头部"<<std::endl; } void BuildBody() override { std::cout<<"创建瘦子的身体"<<std::endl; } void BuildArmLeft() override { std::cout<<"创建瘦子的左手"<<std::endl; } void BuildArmRight() override { std::cout<<"创建瘦子的右手"<<std::endl; } void BuildLegLeft() override { std::cout<<"创建瘦子的左脚"<<std::endl; } void BuildLegRight() override { std::cout<<"创建瘦子的右脚"<<std::endl; }};class PersonFatBuilder:public PersonBuilder{public: //创建身体的每个部位 void BuildHead() override { std::cout<<"创建胖子的头部"<<std::endl; } void BuildBody() override { std::cout<<"创建胖子的身体"<<std::endl; } void BuildArmLeft() override { std::cout<<"创建胖子的左手"<<std::endl; } void BuildArmRight() override { std::cout<<"创建胖子的右手"<<std::endl; } void BuildLegLeft() override { std::cout<<"创建胖子的左脚"<<std::endl; } void BuildLegRight() override { std::cout<<"创建胖子的右脚"<<std::endl; }};//指挥者类负责根据传入的参数来创建相应的肢体class PersonDirector{public: //构造函数初始化指针 PersonDirector(PersonBuilder *pb):_pb(pb){} //开始构造相应的肢体 void CreatePerson() { _pb->BuildHead(); _pb->BuildBody(); _pb->BuildArmLeft(); _pb->BuildArmRight(); _pb->BuildLegLeft(); _pb->BuildLegRight(); } private: //用于保存PersonBuilder对象的指针 PersonBuilder *_pb;};int main(){ //声明瘦子的实例 PersonThinBuilder *pb = new PersonThinBuilder(); //将实例传入指挥者类 PersonDirector pd(pb); //调用创建函数 pd.CreatePerson(); return 0;}
以下情况适用此模式(摘抄自《设计模式》):
1.当创建复杂对象的算法应该独立于该对象的组成部分以及他们的装配方式时
2.当构造过程必须允许被构造的对象有不同的表示时.
转载请注明源地址:http://blog.csdn.net/clh01s/article/details/76423516
阅读全文
0 0
- 建造者模式(builder)c++版本
- Builder 建造者模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- 建造者模式 - builder
- Builder建造者模式
- 建造者模式(Builder)
- 建造者模式(builder)
- 建造者模式(Builder)
- 建造者模式--Builder
- Builder建造者模式
- builder建造者模式
- Builder(建造者模式)
- 建造者模式,Builder
- 建造者模式(Builder)
- 建造者(Builder)模式
- 建造者模式(Builder)
- 建造者模式(Builder)
- zoj2588(tarjan求割边)
- Codeforces 834D The Bakery DP(线段树维护)
- html5学习笔记
- 解决 Button 设置 background 之后点击动画效果消失的问题
- 发现web-inf下的jsp可以直接访问的一个方法
- 建造者模式(builder)c++版本
- 搭建简单的mongodb服务器
- 【RabbitMQ】——Spring AMQP
- Android实现收款成功金额的语音播报功能(Nice tone)
- pyaudio 编译相关问题
- iOS 蓝牙低功耗使用
- LOJ模板题 无源汇有上下界可行流
- [LeetCode] 150. Evaluate Reverse Polish Notation
- 多个线程多把锁