我们的项目中的技术(一)
2014-03-18 00:58
148 查看
今天我来写一写我们项目中所用的技术,单例模式。很巧的是,单例模式并非我们的项目实施的每一个省都在用,所以,你在代码中无法看到,很正常。
方法因需求而生。就像我们工作的事一样,我们需要一个打印机,公司若有,便让我们用,若没有,则买一个给我们用,总之,打印机最多有一个。所以一开始,我们定义了Printer类,悲剧的是,Printer* pa = new Printer()、Printer* pb = new Printer()、Printer* pc = new Printer()就可以随意购买打印机,现状就是:每个人都可以买打印机,问题由此展开。
我们想到的就是,把“构造函数”置为私有,然后先定义一个打印机指针。代码如下:
/* * RemindApi.h * * Created on: Mar 15, 2014 * Author: huasheng */ #include<sys/types.h> #include<sys/ipc.h> #include<sys/shm.h> #include <cstddef> #include<iostream> using namespace std; class RemindApi { private: static RemindApi* instance; RemindApi(); public: static RemindApi* getInstance(); bool read(); bool write(); };
instance就是一个惟一打印机的代号,构造函数也置为private了,似乎还缺少一个判断打印机是否存在,不存则购买的动作,因此,下面代码由此而生。
/* * RemindApi.cpp * * Created on: Mar 15, 2014 * Author: huasheng */ #include"RemindApi.h" RemindApi* RemindApi::instance = (RemindApi*)NULL; RemindApi::RemindApi() { } RemindApi* RemindApi::getInstance() { if(NULL == instance) { instance = new RemindApi(); } return instance; //return NULL; } bool RemindApi::read() { cout<<"I am reading"<<endl; return true; } bool RemindApi::write() { cout<<"I am writing"<<endl; return true; }
代码的精髓便是getInstance()函数了,有人会问,怎么使用呢?
/* * main.cpp * * Created on: Mar 15, 2014 * Author: huasheng */ #include"RemindApi.h" int main() { RemindApi* rpi = RemindApi::getInstance(); RemindApi* rpi1 = RemindApi::getInstance(); rpi->write(); rpi->read(); return 0; }
上面代码,很明显,rpi和rpi1肯定是一样的,无所何时,你去寻找一个指针,得到的都是一样的。
最后,我还要说,RemindApi* RemindApi::instance = (RemindApi*)NULL;是不是重复定义,经过实践我才得知道,类的静态变量不仅要在类中声明,还要在类外进行声明+初始化。
相关文章推荐
- oschina.net 是目前中国最大的开源技术社区。我们传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技
- 2008年8月21号,星期四,晴。志当存高远。—— 诸葛亮《诫外生书》今天是我博士生涯的第46天,昨天胡给我们小组开会了,中间讲的,做项目如何规避“地雷”和如何从普通的操作中提炼出关键技术
- 【技术干货】我们的项目是如何技术选型的
- 我们项目中需要准备的技术
- 【PaPaPa】集成B/S主流技术的MVC5项目 - 实干派:说做就做,我们已经起航,你还在观望吗
- 晒晒我们的开源项目 - robbin的自言自语 - ITeye技术网站
- 技术干货:我们的项目是如何技术选型的
- Android项目技术总结:主界面中ListView装载数据并结合手势进行翻页
- 大学生在技术面前我们如何去看待社会认证
- 我们应该如何对待技术信仰?
- IT项目经理是否需要技术能力
- 国内技术管理人员批阅google的“春运交通图”项目
- 我们的新项目,美容院管理
- IBM:这五个智能技术的发展,将会改变我们生活
- 第02天实战技术(06):项目恶心Bug
- 通过自己的项目实际经验,阐述为什么“恶心玩技术”?玩Java开源C/S的教训(二)
- 我们应该怎么学技术呢?朋友们,共享一下
- 为什么我们项目需要数据优化服务
- 2012-10-15 → 2012-10-21 周总结:项目要试运行了(负责技术支持,要加油了)
- 技术选择 – 我们为什么不选择Puppet?