Singleton模式称作单件模式或单例模式。它的作用是确保一个类在整个工程中有且只有一个实例。可以在多个不同的类中很方便的所需要的类的方法。
原理:
它的构造函数是私有的,你不能去new它。该单例类里面已经实例化好了一个了,并且是static的,并提供一个获取该实例的方法!客户端只能通过该方法获取这个已经实例化好了的,这样就保证了只有一个实例存在!
1. Singleton.h文件
/*
* Singleton.h
*/
#ifndef SINGLETON_H_
#define SINGLETON_H_
#include <assert.h>
namespace GSingleton
{
template <typename T>
class Singleton
{
protected:
static T* mSingleton;
private:
Singleton()
{
assert(!mSingleton);
mSingleton=static_cast< T*>(this);
cout<<"create Singleton()"<<endl;//看看什么时候调用构造函数的
}
~Singleton()
{
assert(mSingleton);
delete mSingleton;
mSingleton=0;
}
public:
static T* getSingletonPtr()
{
return ((!mSingleton)?(mSingleton=new T):mSingleton);
}
static T& getSingleton()
{
return ((!mSingleton)?(*(mSingleton=new T)):(*mSingleton));
}
};
}
#endif /* SINGLETON_H_ */
2. 类SubClass继承并实例化模板类Singleton
/*
* SubClass.h
*/
#ifndef SUBCLASS_H_
#define SUBCLASS_H_
#include "Singleton.h"
#include <iostream>
using namespace std;
class SubClass:public GSingleton::Singleton<SubClass>
{
public:
SubClass();
virtual ~SubClass();
inline void Show()
{
static int s=0;
s++;
cout<<"s===="<<s<<endl;
}
};
#endif /* SUBCLASS_H_ */
/*
* SubClass.cpp
*/
#include "SubClass.h"
template<> SubClass* GSingleton::Singleton<SubClass>::mSingleton=0;
SubClass::SubClass()
{
}
SubClass::~SubClass()
{
}
3. 使用函数SubClass::Show()
- #include "SubClass.h"
- SubClass::getSingletonPtr()->Show();