Skip to content


singleton模式与double-checked Locking模式

singleton是一个十分常用的模式,也十分简单.不过到现在才知道这种模式叫singleton模式.
现在把singleton模式做一下记录.
模式意图:
保证一个类仅有一个实例,并提供一个访问它的全局访问点.
问题:
几个不同的客户对象需要引用一个对象.而且希望确保这种类型的对象数目不超过1个
实现原理:
1.添加一个类的私有的静态成员变量,引用所需的对象.
2.添加一个公共的静态方法,它在成员变量的值为null时实例化这个类,然后返回成员变量的值.
3.将构造函数的状态设置为保护或私有,从而防止任何人实例化这个类,绕过静态构造函数的机制
Singleton模式的C++片段

class SingletonTest{
private static Singleton s_instance;
private Singleton(){}
public static SingletonTest getInstance(){
if(NULL == s_instance){
s_instance = new SingletonTest;
return s_instance;
}
}
}

在多线程模式下,singleton模式不能总是正常工作.
Double-cheched Locking是singletonr 的一种变体.仅适用于多线程模式.
此模式的特点:
1.在创建对象之前,添加一次检查,避免不必要的锁定
2.支持多线程环境

class DCL{
private static DCL s_instance;
private DCL(){}
public static DCL getInstance(){
if(NULL == s_instance){
synchronized(this){
if(null == s_instance){
s_instance = new DCL();
}
}
}
}
private synchronized static void doSync()
{
if(NULL ==s_instance)s_instance = new DCL();
}
}

Posted in 设计模式.

Tagged with , .


2 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. 阿草哥 says

    兄弟是搞c++的是么
    正想多学点东西呢
    我是做java web方面的

  2. 果沟 says

    呵呵!我做过C++,两年.目前主要做lamp开发



Some HTML is OK

or, reply to this post via trackback.