建造者模式和原型模式
一:建造者模式所谓建造者模式,就是通过不同对象去创建一个复杂的类。Builder 模式要解决的也正是这样的问题:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成) ,我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来, 这样做的好处就是通过一步步的进行复杂对象的构建, 由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样先看看类图:代码例子:(假设其中的鸡翅、汉堡、可乐等是已经有了的类)[cpp]#include<iostream>#include<string>#include<vector>using namespace std;class TaoCan{public:TaoCan(){}~TaoCan(){}vector<string>v;};class Builder{public:Builder(){}~Builder(){}void addfood(string foodname){tc.v.push_back(foodname);}void create(){cout<<"套餐由以下食物组成"<<endl;for(vector<string>::iterator iter=tc.v.begin();iter!=tc.v.end();++iter){cout<<*iter<<" ";}}private:TaoCan tc;};int main(){//顾客告诉服务员,服务员告诉Builder,这里将服务员和Builder合成一个//顾客告诉服务员要:汉堡、鸡翅、可乐、薯条。//于是...Builder *b=new Builder();b->addfood("汉堡");b->addfood("鸡翅");b->addfood("可乐");b->addfood("薯条");b->create();system("pause");return 0;}#include<iostream>#include<string>#include<vector>using namespace std;class TaoCan{public:TaoCan(){}~TaoCan(){}vector<string>v;};class Builder{public:Builder(){}~Builder(){}void addfood(string foodname){tc.v.push_back(foodname);}void create(){cout<<"套餐由以下食物组成"<<endl;for(vector<string>::iterator iter=tc.v.begin();iter!=tc.v.end();++iter){cout<<*iter<<" ";}}private:TaoCan tc;};int main(){//顾客告诉服务员,服务员告诉Builder,这里将服务员和Builder合成一个//顾客告诉服务员要:汉堡、鸡翅、可乐、薯条。//于是...Builder *b=new Builder();b->addfood("汉堡");b->addfood("鸡翅");b->addfood("可乐");b->addfood("薯条");b->create();system("pause");return 0;}二:原型模式Prototype 模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建。在 C++中拷贝构造函数(Copy Constructor)曾经是很对程序员的噩梦,浅层拷贝和深层拷贝的魔魇也是很多程序员在面试时候的快餐和系统崩溃时候的根源之一。类图如下:原型模式,说白了就是用一个对象去初始化另一个对象,达到了复制的效果。例子代码如下:[cpp]#include<iostream>#include<string>#include<vector>using namespace std;class YuanXing{public:YuanXing(){}~YuanXing(){}virtual YuanXing* clone()=0;};class JuTiYuanXing:public YuanXing{public:JuTiYuanXing(){}JuTiYuanXing(JuTiYuanXing &m){*this=m;}~JuTiYuanXing(){}JuTiYuanXing* clone(){return new JuTiYuanXing(*this);}};int main(){JuTiYuanXing *aa=new JuTiYuanXing;JuTiYuanXing *bb=aa->clone();system("pause");return 0;}#include<iostream>#include<string>#include<vector>using namespace std;class YuanXing{public:YuanXing(){}~YuanXing(){}virtual YuanXing* clone()=0;};class JuTiYuanXing:public YuanXing{public:JuTiYuanXing(){}JuTiYuanXing(JuTiYuanXing &m){*this=m;}~JuTiYuanXing(){}JuTiYuanXing* clone(){return new JuTiYuanXing(*this);}};int main(){JuTiYuanXing *aa=new JuTiYuanXing;JuTiYuanXing *bb=aa->clone();system("pause");return 0;}Prototype 模式通过复制原型(Prototype)而获得新对象创建的功能,这里 Prototype 本身就是“对象工厂” (因补充:软件开发 , C++ ,
上一个:cf 230c
下一个:nbu 2427 Pigs
- 更多C/C++疑问解答:
- 关于c++的cout输出的问题。
- 在学校里学过C和C++,不过学的很一般,现在自学C#,会不会很难?
- 全国计算机二级C语言笔试题
- 已知某树有2个2度结点,3个3度结点,4个4度结点,问有几个叶子结点?
- c++数据结构内部排序问题,整数排序
- 2012九月计算机二级C语言全国题库,,急求急求
- 如果assert只有一个字符串作为参数,是什么意思呢?
- C语言中,哪些运算符具有左结合性,哪些具有右结合性,帮忙总结下,谢谢了!
- 为什么用结构体编写的程序输入是,0输不出来啊~~~
- 将IEEE—754的十六进制转化为十进制浮点类型,用C或C++都行,多谢各位大侠啊,非常感谢!
- 为什么这个程序求不出公式?
- 这个链表倒置的算法请大家分析下
- c语言函数库调用
- C语言unsigned int纠错
- C语言快排求解啊