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

   

今天我来写一写我们项目中所用的技术,单例模式。很巧的是,单例模式并非我们的项目实施的每一个省都在用,所以,你在代码中无法看到,很正常。

方法因需求而生。就像我们工作的事一样,我们需要一个打印机,公司若有,便让我们用,若没有,则买一个给我们用,总之,打印机最多有一个。所以一开始,我们定义了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;是不是重复定义,经过实践我才得知道,类的静态变量不仅要在类中声明,还要在类外进行声明+初始化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值