Singleton(单例模式)顾名思义就是只能有一个实例,对于那些需要创建、管理对象的类来说,非常的有意义。(如果一个国家同时存在多个管理者,那后果。。。)
单例模式有两个最主要的特点:
1.只有一个类的实例。
2.并且有一个全局的访问点。
如何利用C++实现一个Singleton模式的类呢?
答案很简单,使用类的静态成员。
类的静态成员可以在类的范围内共享数据,也就是说不管这个类实例化了几次,只要是这个类的实例,就可以共享类的静态成员,这个对于我们实现单例非常合适。
实现的代码有两种:
实现一:(个人非常喜欢的方法)
Singleton* Singleton::Instance () {
if (_instance == 0) {
_instance = new Singleton;
}
return _instance;
}
声明一个返回Singleton*的工厂方法,这个方法中每次都会对_instance这个static Singleton *进行判断,如果==0,说明目前不存在一个类的实例,那么创建一个,否则说明已经存在了,那么久不需要创建,直接返回即可。
实现二:
Singleton* Singleton::Instance() {
static Singleton _instance;
return &_instance;
}
这种实现利用了静态变量只初始化一次的特点,如果执行过一次了就不会再次执行了,从而达到创建一个单例的效果。