您的位置:首页 > 编程语言 > C语言/C++

单例模式的几种写法

2016-03-01 20:17 246 查看
设计模式作为软件设计开发中的一种思想,在开发中占据一个很重要的地位。通过使用设计模式封装代码,可以使我们的代码具备较高的升级维护性,开发也会更方便快捷清晰。其中单例模式是用的比较多,其作用在于保证一个类仅有一个实例,并提供一个访问它的全局访问点。

单例模式的实现并不难,只需把构造函数声明为静态私有的,通过函数去实例化,或者定义的时候实例化即可,其中函数也要定义为静态的,代码如下:

/*懒汉式单例模式,*/
class Singleton
{
public:
static Singleton* CreateInstance()
{
if (m_pSingleton == NULL)
{
return new Singleton();
}
return m_pSingleton;
}
private:
Singleton();
//把拷贝构造函数,赋值函数都声明为私有,防止复制
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
static Singleton *m_pSingleton;
};

/*饿汉式单例模式*/
class Singleton
{
public:
static Singleton* CreateInstance()
{
r
4000
eturn m_pSingleton;
}
private:
Singleton();
//把拷贝构造函数,赋值函数都声明为私有,防止复制
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
static Singleton *m_pSingleton;
};
Singleton* Singleton::m_pSingleton = new Singleton();

上面的两种单例模式实现方法,其中懒汉式单例模式是要到第一次使用时才实例化,用时间换空间;而饿汉式单例模式则一开始就实例化,用空间换时间。

要注意的是懒汉式单例模式在多线程模式下要考虑多线程安全问题,要给它加个锁,达到单一访问的要求,饿汉式单例模式则无此要求。

线程安全的懒汉式单例模式代码如下:

class Singleton
{
public:
static Singleton* CreateInstance()
{
if (m_pSingleton == NULL)
{
lock(); //锁函数,可以用临界区来实现,这里为了代码简洁就不写了
if (m_pSingleton == NULL)
{
return new Singleton();
}
}
return m_pSingleton;
}
private:
Singleton();
//把拷贝构造函数,赋值函数都声明为私有,防止复制
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
static Singleton *m_pSingleton;
};


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ 操作系统