zoukankan      html  css  js  c++  java
  • 单例模式

    一、单例模式

    单例模式就是保证在一个系统中最多只存在该类的一个对象,这在数据库连接中的非常实用。

    单例按对象生成的时间点的不同模式分为两种:懒汉单例模式、恶汉单例模式

    二、两种单例模式

    懒汉单例模式:

    #ifndef __SINGLE_TON_H__
    #define __SINGLE_TON_H__
    
    class SingleTon
    {
    public:
        ~SingleTon()
        {
            if (ms_pSingleTon != NULL)
            {
                delete ms_pSingleTon;
                ms_pSingleTon = NULL;
            }
        }
    
    public:
        static SingleTon *GetInstance() // 获得对象的接口
        {
            if (ms_pSingleTon != NULL)
            {
                ms_pSingleTon = new SingleTon();
            }
            return ms_pSingleTon;
        }
        
    private:
        SingleTon(); // 私有的构造函数
        
    private:
        static SingleTon *ms_pSingleTon;
    };
    
    #endif __SINGLE_TON_H__

    恶汉单例模式:


    仔细思考了一下才发现,貌似C++无法实现恶汉单例模式,也可能是我没考虑到怎么实现。

    三、恶汉VS懒汉

    恶汉是在一开始就实例化一个对象放在那里,它是以空间换时间

    懒汉是在需要的时候才去实例化一个对象并返回,它是以时间换空间

    四、总结

    原来以为单例模式很简单,自己也理解了它的实现原理以及可以用到的场景,但是实际编码的时候才发现,还是有自己未想到的地方,比如:我认为在C++中是无法实现恶汉单例模式的,这是我以前没有想到的问题。

    告诉自己不要眼高手低,看书的同时也要多敲代码。


    static SingleTon *GetInstance() // 获得对象的接口
    {
        if (m_pSingleTon == NULL)
        {
            m_lock.lock();
            if (m_pSingleTon == NULL)
            {
                m_pSingleTon = new SingleTon();
            }
            m_lock.unlock();
        }
        return ms_pSingleTon;
    }

    用于多线程,加锁机制。

  • 相关阅读:
    HDU1443_Joseph_约瑟环
    HDU1568_求fibonacci的前四位
    HDU3368_翻转棋
    HDU1134_catalan_大数运算
    HDU1032_The 3n+1_数学题
    HDU2674_N!模2009
    HDU2067_小兔的棋盘_catalan_递推
    文件读写操作inputStream转为byte[] , 将InputStream写入本地文件
    JVM堆内存调优
    Java使用 POI 操作Excel
  • 原文地址:https://www.cnblogs.com/lit10050528/p/4305858.html
Copyright © 2011-2022 走看看