在Linux下使用单件Singleton模式

概述:

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();

你可能感兴趣的:(Singleton)