首页 > 代码库 > 大话设计模式C++实现-第21章-单例模式
大话设计模式C++实现-第21章-单例模式
一、UML图
二、概念
单例模式:保证一个类仅有一个实例,并提供一个访问他的全局访问点。[DP]
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保护它的唯一实例。这个类可以保证没有其他实例可以被创建,并且他可以提供一个访问该实例的方法。
三、注意:
使用单例模式,只能保证一个线程内对象不会被多次创建,而不不能保证多线程的情况。因此,需要考虑多线程的话,就要用锁。
四、UML实现
头文件Singleton.h:
#ifndef SINGLETON_H #define SINGLETON_H #include <afx.h> 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
客户单代码:
#include <iostream> #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<<"两个对象是相同的实例。"<<std::endl; system("pause"); }
大话设计模式C++实现-第21章-单例模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。