1、作用
在完全使用面向对象模式编程情况下,需要一个唯一对象。这个时候不能定义static的全局变量,就需要使用到单例模式Singleton。(工厂模式中的工厂,可以只用一个)
2、实现方式
单例模式实现很简单,只是用一个类来封装一个静态类型的变量,提供一个获取静态成员变量的函数,并且函数中保证静态成员变量只new一次。单例模式返回的是静态对象的指针,用不完全类型只能定义指针变量,在定义instance时,Singleton类还是不完全定义的。
3、C++代码
Singleton.h
class Singleton { public: static Singleton *Instance(); private:
Singleton(); // Singleton不应该在外边实例化,所以把构造函数声明为private的或者protected的 static Singleton *instance; };
Singletong.cpp
#include <iostream> #include "Singleton.h" using namespace std; Singleton *Singleton::instance = nullptr; Singleton::Singleton() { cout<<"new instance ...."<<this<<endl; } Singleton *Singleton::Instance() { if(instance == nullptr) instance = new Singleton(); cout<<"get instance ..."<<instance<<endl; return instance; }
test.cpp
#include "Singleton.h" int main() { Singleton *s1 = Singleton::Instance(); Singleton *s2 = Singleton::Instance(); Singleton *s3 = Singleton::Instance(); }
输出:只new了一次对象
new instance ... 0x161ac20 get instance ... 0x161ac20 get instance ... 0x161ac20 get instance ... 0x161ac20