设计模式(一):单例设计模式

设计模式

通过某个类在内存中只能创建唯一的一个对象;
1.该对象不是栈(全局)对象;
2.该对象只能是堆对象。

实现步骤

1.将构造函数私有化;
2.在类中定义一个静态的指针变量(一般为私有),并在类外初始化为空;
3.定义一个返回值为类指针的静态成员函数。如果2中的指针对象为空,则初始化对象;若非空,直接返回该对象,保证类在内存中只有一个对象。

应用场景

1.单例模式替换全局变量;
2.配置文件的内容可用单例对象存储;
3.词典文件、网页库等。

实现代码

#include <iostream>
using std::cout;
using std::endl;

class Singleton
{
public:
	static Singleton *	getInstance()
	{
		if(_pInstance == nullptr) {
			_pInstance = new Singleton();
		}
		return _pInstance;
	}

	static void destroy()
	{
		if(_pInstance)
			delete _pInstance;
	}

	void print() const
	{
		cout << "Singleton::data = " << _data << endl;
	}
private:
	Singleton():_data(0){	cout << "Singleton()" << endl;	}
	~Singleton(){	cout << "~Singleton()" << endl;	}

private:
	int _data;
	static Singleton * _pInstance;
};

Singleton * Singleton::_pInstance = nullptr;

int main(void)
{
	//Singleton s1;//与要求不符合,该语句不能让他编译通过
	//s1.print();
	//Singleton s2;//构造函数是私有的
	//s2.print();
	
	//Singleton * p = new Singleton();//不能在类外调用构造函数
	
	Singleton * p1 = Singleton::getInstance();
	Singleton * p2 = Singleton::getInstance();

	Singleton::getInstance()->print();

	//delete p1;//该语句不能让他编译通过
	//delete p2;/会调用析构函数,但是析构函数是私有的
	
	Singleton::destroy();
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值