单例模式
一、单例模式
单例模式就是保证在一个系统中最多只存在该类的一个对象,这在数据库连接中的非常实用。
单例按对象生成的时间点的不同模式分为两种:懒汉单例模式、恶汉单例模式
二、两种单例模式
懒汉单例模式:
#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; }
用于多线程,加锁机制。