设计模式之-单例模式

单例模式的特点:

一个类只有一个实例;

提供一个全局访问点;

禁止拷贝;

那代码中都需要做什么事情,才能够实现这些特点呢?

(1)一个实例。也即是每次获取该类的实例的时候,都必须返回已经存在的同一个实例。这样的话,就不能允许调用者使用new操作符来任意创建实例(一旦使用new,就会重新分配内存,就不能保证一个实例了)。

那就需要将类的构造函数声明为private。

(2)全局访问点。因为构造函数私有化了,而该类的成员变量和成员函数只能用过类实例来访问,所以外界就需要一个能够访问该类的方式,也就是全局访问点。

类中创建一个静态成员函数。

(3)禁止拷贝

因为只有一个实例,所以不允许出现拷贝。可以通过如下方式禁止类实例的拷贝:

拷贝构造函数声明为私有,并且不提供实现;

复制运算符(operator = )声明为私有,并且不提供实现。

(4)解决单实例类的析构问题

使用局部静态变量,来解决析构问题,并且又不影响单实例的唯一性。


下面是用C++写的单例类实现:

<pre name="code" class="cpp">#pragma once
class SingleInstClass
{
public:
	static SingleInstClass &GetSingleInst()
	{
		static SingleInstClass m_inst;
		return m_inst;
	}
	void printlog()
	{
		printf("call printlog()\n");
	}
private:
	SingleInstClass(void)
	{
		printf("call SingleInstClass()\n");
	}
	~SingleInstClass(void)
	{
		printf("call ~SingleInstClass()\n");
	}
	SingleInstClass(const SingleInstClass&);
	SingleInstClass & operator = (const SingleInstClass&);
};



int _tmain(int argc, _TCHAR* argv[])
{
	SingleInstClass &inst = SingleInstClass::GetSingleInst();
	inst.printlog();
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值