单例模式
单例模式也称单件模式,是使用最广泛的设计模式之一,简单说明一下就是这个类只允许创建一个对象(实例);其意图就是保证一个类仅有一个实例,并提供一个访问它的全局访问点(公有的静态函数),该实例被所有程序模块共享。
单例模式有两种:懒汉版,饿汉版
首先简述一下单例类的特点:
- 构造函数私有化:防止外界再创造对象
- 使用静态指针变量指向这个唯一的对象(实例)
- 使用一个公有静态方法(函数)获取该对象(实例)
懒汉模式
//懒汉
class singketon {
static singketon* instance;
singketon() {};
singketon(const singketon&);
public:
static singketon* get() {
if (instance == nullptr)
instance = new singketon();
return instance;
}
};
singketon* singketon::instance = NULL;//初始化为空
懒汉模式就是在外界调用静态函数的时候在创建对象,指针变量,构造函数,拷贝构造均为私有化,静态函数公有化,以便其他地方调用。
饿汉模式
//饿汉
class singketon {
static singketon* instance;
singketon() {};
singketon(const singketon&);
public:
static singketon* get() {
return instance;
}
};
singketon* singketon::instance = new singketon();//初始化为空
饿汉模式可以理解为等不及了,在静态函数没有被调用的时候就已经创建好对象了。
综上所述,单例模式就是只有一个该类型的变量,不允许再创建其他的变量,而懒汉模式和饿汉模式的区别就在于:懒汉模式是在调用函数之后才创建对象,饿汉模式是在调用函数之前就已经把对象创建好了。