设计模式之单例模式 c++实现以及详解
2014-07-08 22:59
471 查看
单例模式: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
UML图
代码:class Lock
{
private:
CCriticalSection m_cs;
public:
Lock(CCriticalSection cs) : m_cs(cs)
{
m_cs.Lock();
}
~Lock()
{
m_cs.Unlock();
}
};
class Singleton
{
private:
Singleton();
Singleton(const Singleton &);
Singleton& operator = (const Singleton &);
public:
static Singleton *Instantialize();
static Singleton *pInstance;
static CCriticalSection cs;
};
Singleton* Singleton::pInstance = 0;
Singleton* Singleton::Instantialize()
{
if(pInstance == NULL)
{ //double check
Lock lock(cs); //用lock实现线程安全,用资源管理类,实现异常安全
//使用资源管理类,在抛出异常的时候,资源管理类对象会被析构,析构总是发生的无论是因为异常抛出还是语句块结束。
if(pInstance == NULL)
{
pInstance = new Singleton();
}
}
return pInstance;
}之所以在Instantialize函数里面对pInstance 是否为空做了两次判断,因为该方法调用一次就产生了对象,pInstance == NULL 大部分情况下都为false,如果按照原来的方法,每次获取实例都需要加锁,效率太低。而改进的方法只需要在第一次 调用的时候加锁,可大大提高效率。
单例模式可以被继承 但是继承了单例类的类 依旧不能生成实例 :
参考 :
http://blog.csdn.net/hackbuteer1/article/details/7460019
大话设计模式
UML图
代码:class Lock
{
private:
CCriticalSection m_cs;
public:
Lock(CCriticalSection cs) : m_cs(cs)
{
m_cs.Lock();
}
~Lock()
{
m_cs.Unlock();
}
};
class Singleton
{
private:
Singleton();
Singleton(const Singleton &);
Singleton& operator = (const Singleton &);
public:
static Singleton *Instantialize();
static Singleton *pInstance;
static CCriticalSection cs;
};
Singleton* Singleton::pInstance = 0;
Singleton* Singleton::Instantialize()
{
if(pInstance == NULL)
{ //double check
Lock lock(cs); //用lock实现线程安全,用资源管理类,实现异常安全
//使用资源管理类,在抛出异常的时候,资源管理类对象会被析构,析构总是发生的无论是因为异常抛出还是语句块结束。
if(pInstance == NULL)
{
pInstance = new Singleton();
}
}
return pInstance;
}之所以在Instantialize函数里面对pInstance 是否为空做了两次判断,因为该方法调用一次就产生了对象,pInstance == NULL 大部分情况下都为false,如果按照原来的方法,每次获取实例都需要加锁,效率太低。而改进的方法只需要在第一次 调用的时候加锁,可大大提高效率。
单例模式可以被继承 但是继承了单例类的类 依旧不能生成实例 :
参考 :
http://blog.csdn.net/hackbuteer1/article/details/7460019
大话设计模式
相关文章推荐
- 设计模式之原型模式 c++实现以及详解
- 设计模式之代理模式 c++实现以及详解
- 通过例子学设计模式之--简单工厂模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--桥接模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--组合模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--工厂方法模式以及使用场景说明(C++实现)
- 详解C++设计模式编程中建造者模式的实现
- 通过例子学设计模式之--原型模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--建造者模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--外观模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--抽象工厂模式以及使用场景说明(C++实现)
- 通过例子学设计模式之--单例模式以及多线程下说明(C++实现)
- 通过例子学设计模式之--适配器模式以及使用场景说明(C++实现)
- 详解C++设计模式编程中策略模式的优缺点及实现
- Head First 设计模式 C++实现
- 常见设计模式的解析和实现(C++)之七-Bridge模式
- 常见设计模式的解析和实现(C++)之三-Builder模式
- C++设计模式:Singleton的模板实现之一
- 常见设计模式的解析和实现(C++)之五-Singleton模式
- 常见设计模式的解析和实现(C++)之九-Decorator模式