您的位置:首页 > 其它

我们的项目中的技术(一)

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;是不是重复定义,经过实践我才得知道,类的静态变量不仅要在类中声明,还要在类外进行声明+初始化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐