一、什么是单例模式?
只能实现一个实例的类就是单例模式。单例模式是一种常见的软件设计模式。单例模式中生成的唯一的实例易于外界访问,从而方便对实例个数的控制并节省资源。
二、怎么实现单例模式?
(1)、把构造函数申明为private或者protected,禁止他人创建。
(2)、内部定义一个静态的实例,实例的动作由一个public的类方法代劳。
三、实现方式:懒汉模式和饿汉模式。
(1)、懒汉模式:延迟加载,直到用时才会加载,比如配置文件。
一般的写法:
内部静态变量的懒汉实现(写起来比较简单,比较推荐)
class Singleton3
{
public:
static Singleton3* GetIntance()//在函数里定义一个静态的实例,保证了拥有唯一性,返回时返回其指针就可以了
{
//lock();
static Singleton3 sing3;
//unlock();
return &sing3;
}
private:
Singleton3(){}
Singleton3(const Singleton3&){}
};
(2)饿汉模式:一开始创建实例,所以饿汉模式是线程安全的。每次用到的时候直接返回就好了。
class Singleton4
{
/*
在创建类的同时就已经创建好一个静态的对象供系统使用,以后不会改变。
*/
public:
static Singleton4 * Getinstance()
{
return sing4;
}
private:
Singleton4(){}
Singleton4(const Singleton4&){}
static Singleton4* sing4;
};
Singleton4* Singleton4::sing4=new Singleton4;
四、使用及选择
对于多线程或者可能多线程工作的情况下,优先选择饿汉模式,以空间换时间。
对于访问量少的,可以选择懒汉模式,以时间换空间。