一、定义:Ensure a class has only one instance , and provide a global point of access to it.(确保其一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。)
二、类图:
三、代码实例:
#include <pthread.h>
class Mutex
{
public:
Mutex()
{
pthread_mutex_init(&_lock, NULL);
}
virtual ~Mutex()
{
pthread_mutex_destroy(&_lock);
}
void Lock()
{
pthread_mutex_lock(&_lock);
}
void Unlock()
{
pthread_mutex_unlock(&_lock);
}
private:
pthread_mutex_t _lock;
};
class ScopedLock
{
public:
ScopedLock( Mutex& mutex_obj ) : _mutex_obj(mutex_obj)
{
_mutex_obj.Lock();
}
~ScopedLock()
{
_mutex_obj.Unlock();
}
private:
Mutex& _mutex_obj;
};
template < class _Type >
class Singleton
{
public:
static _Type* GetInstance()
{
if ( NULL == _instance() )
{
ScopedLock lock( _mutex() );
if (NULL == _instance())
{
_instance() = new _Type();
}
}
}
static void DestroyInstance()
{
if ( _instance())
{
ScopedLock lock( _mutex() );
delete _instance();
_instance() = NULL;
}
}
protected:
static _Type* & _instance()
{
static _Type* p = NULL;
return p;
}
static Mutex & _mutex()
{
static Mutex m;
return m;
}
};
四、优缺点:
优点:
1.内存中只有一个实例,减少内存开销。
2.减少反复创建销毁的性能开销。
3.只有一个全局访问点,优化和共享资源访问。
缺点:
1.没有其他接口,扩展困难。
2.需要对多线程处理,增加开销。