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

本文深入探讨单例模式的概念、优点、实现方式,并通过代码实例展示了如何使用单例模式来优化内存使用、减少性能开销及简化资源访问。

一、定义: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.需要对多线程处理,增加开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值