大话设计模式C++实现-第21章-单例模式

2019-04-13 22:09发布

一、UML图

二、概念 单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。[DP] 通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保护它的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。
三、注意: 使用单例模式,只能保证一个线程内对象不会被多次创建,而不不能保证多线程的情况。因此,需要考虑多线程的话,就要用锁。
四、UML实现 (1)头文件Singleton.h: #ifndef SINGLETON_H #define SINGLETON_H #include class Singleton { private: static Singleton* instance; //临界区,防止多线程产生多个实例 static CRITICAL_SECTION m_Sec; Singleton(){} public: static CRITICAL_SECTION* getLock() { return &m_Sec; } static Singleton *GetInstance() { //双重锁定 if(instance==NULL) { EnterCriticalSection(&m_Sec); if(instance==NULL) instance=new Singleton(); LeaveCriticalSection(&m_Sec); } return instance; } }; #endif

(2)客户端代码: #include #include "Singleton.h" //静态成员在类体外定义 Singleton* Singleton::instance=0; CRITICAL_SECTION Singleton::m_Sec=CRITICAL_SECTION(); void main() { //初始化临界区 InitializeCriticalSection(Singleton::getLock()); Singleton* singleton1=Singleton::GetInstance(); Singleton* singleton2=Singleton::GetInstance(); //删除临界区 DeleteCriticalSection(Singleton::getLock()); if(singleton1==singleton2) std::cout<<"两个对象是相同的实例。"< (3)运行截图