单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
适用场景
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2、当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。
这里用C++实现了单例模式的懒汉模式和饿汉模式
#include<iostream>
using namespace std;
//饿汉式单例模式
class singleton1
{
public:
static singleton1 &get_instance() { return sig; };
private:
singleton1() {};
~singleton1() {};
static singleton1 sig;
};
singleton1 singleton1::sig;
//懒汉式单例模式
class singleton2
{
public:
static singleton2 *get_instance() {
if (sig == NULL)
{
sig = new singleton2();
}
return sig; };
private:
singleton2() {};
~singleton2() {};
static singleton2 *sig;
};
singleton2* singleton2::sig=NULL;
int main()
{
singleton1 &s1 = singleton1::get_instance();
singleton1 &s2 = singleton1::get_instance();
cout <<"s1: "<< (int)&s1 << endl << "s2: " << (int)&s2 << endl;
singleton2 *k1 = singleton2::get_instance();
singleton2 *k2 = singleton2::get_instance();
cout << "k1: " << (int)&(*k1) << endl << "k2: " << (int)&(*k2) << endl;
return 0;
}
在visual studio 2015上运行结果: