您的位置:首页 > 编程语言 > C语言/C++

设计模式C++实现:单例模式(Singleton)

2016-01-19 13:21 666 查看
一、定义: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.需要对多线程处理,增加开销。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  singleton 单例模式