创建型:单例模式(singleton)
来源:互联网 发布:外汇软件 编辑:程序博客网 时间:2024/06/01 21:05
单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。唯一的实例是类的一个普通对象,但设计这个类时,让它只能创建一个实例并提供对此实例的全局访问。唯一实例类Singleton在静态成员函数中隐藏创建实例的操作。习惯上把这个成员函数叫做Instance(),它的返回值是唯一实例的指针。
如下实现中,CSingleton是一种线程安全,能够在类的析构行为中执行必须的操作比如关闭文件,释放外部资源(程序在结束的时候,系统会自动析构所有的全局变量。事实上,系统也会析构所有的类的静态成员变量,就像这些静态成员也是全局变量一样。利用这个特征,我们可以在单例类中定义一个这样的静态成员变量,而它的唯一工作就是在析构函数中删除单例类(CGarBage)的实例)。CSingleton2和CSingleton3是使用局部静态变量实现,非常强大的方法,完全实现了单例的特性,而且代码量更少,也不用担心单例销毁的问题。CSingleton3为了防止拷贝,将拷贝构造和赋值操作符声明为private。
Singleton.h#ifndef SINGLE_INSTANCE_H#define SINGLE_INSTANCE_H class CSingleton{public: staticCSingleton* instance();private: CSingleton(); CSingleton(const CSingleton& copy); CSingleton&operator = (const CSingleton&); ~CSingleton(); /// garbagerecycle class CGarBage{ public: CGarBage(){} ~CGarBage(){ if(CSingleton::m_instance) deleteCSingleton::m_instance; } };private: static CGarBagem_garbage; static CSingleton* m_instance;}; /// implementation by local static variableclass CSingleton2{private: CSingleton2() { }public: static CSingleton2 * GetInstance() { static CSingleton2 instance; return&instance; }}; class CSingleton3{private: CSingleton3() { } /// avoid being copied and assigned CSingleton3(constCSingleton &); CSingleton3 &operator = (const CSingleton3 &);public: static CSingleton3 & GetInstance() { static CSingleton3 instance; return instance; }};#endif
Singleton.cpp#include "SingletonInstance.h"#include <iostream>#include <mutex>namespace{ std::mutex uniqueMutex;}CSingleton* CSingleton::m_instance = 0;CSingleton::CGarBage CSingleton::m_garbage;CSingleton* CSingleton::instance(){ if (!m_instance){ /// 双重判断,防止大量线程阻塞 std::unique_lock<std::mutex>lock(uniqueMutex); if(!m_instance){ m_instance= new CSingleton(); } } return m_instance;}CSingleton::CSingleton(){ std::cout<< "constructor..." << std::endl;} CSingleton::~CSingleton(){ std::cout<< "destructor..." << std::endl;}
阅读全文
0 0
- Singleton---单例模式(创建型)
- 创建型:单例模式(singleton)
- 创建型模式--单例模式(Singleton)
- 创建型模式-单例模式(singleton)
- 单例模式(Singleton)(对象创建型模式)
- 创建型模式之单例模式(Singleton)
- 创建型模式-----单例模式(Singleton)
- 创建型模式1:单例模式(Singleton Pattern)
- 【创建型模式一】单例模式(Singleton)
- 三、创建型模式:单例模式(SINGLETON)
- 创建型模式:单例模式(SINGLETON)
- 十二、单例模式Singleton(创建型模式)
- (创建型模式)SINGLETON——单例模式
- 设计模式-创建型-单例模式(Singleton)
- Singleton模式(单例模式 创建型)
- 设计模式--单例模式Singleton(创建型)
- 创建型模式:单例模式(Singleton)
- 创建型 - Singleton单例模式 (转)
- 为什么hibernate在不联网的时候解析不了配置文件?(hibernate.cfg.xml)
- FCC-----------Design a danmu app
- NPOI导出Excel2007-xlsx格式文件,用于web时需要注意的问题-XSSFWorkbook处理问题
- SQL Server 2012 SEQUENCE 使用
- HTML学习3
- 创建型:单例模式(singleton)
- 确定比赛名次(拓扑排序)
- 软件编写规范(可读性)
- hdu2675
- Java RMI详解
- thread join和detach
- js事件
- 二进制里的青春与爱
- 对象和变量,函数