工作一年有余,一直按照自己的思维来写代码。最近才开始接触设计模式,发现过去自己的不少代码,若能用上设计模式,将变得更简洁和高效。
为让自己更好理解设计模式,便开始写学习笔记。笔记内容主要来自大话设计模式以及GoF的设计模式。
单例模式
单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。
当类只能有一个实例,并且用户可以从一个众所周知的访问点访问它时便可考虑使用单例模式。
Singleton的类定义:
class Singleton
{
public:
static Singletion* getInstance();
protected:
Singleton();
private:
static Singleton* _instance;
}
相应的类的实现:
Singleton* Singleton:: _instance = 0;
Singleton* Singleton::getInstance()
{
if(_instance == 0)
{
_instance = new Singleton;
}
return _instance;
}
需注意的地方:
在多线程的程序中,多个线程同时访问Singleton类,调用getInstance()方法,会有可能造成创建多个实例的。
在多线程编程时,可通过加锁来解决这样的问题:
Singleton* Singleton:: getInstance()
{
if(_instance == 0)
{
Lock(syncroot)
{
if(_instance == 0)
{
_instance = new Singleton;
}
}
}
return _instance;
}