单例模式
来源:互联网 发布:mysql 查询一年内 编辑:程序博客网 时间:2024/06/05 17:59
意图: 使类的对象成为系统中唯一的实例
实现分析:
1. 任何new 的过程得到的 对象都是一样的, 即 :
Object *m_obj1 = new Object();
Object *m_obj2 = new Object();
如果采用这种方式,则 m_obj1 != m_obj2, 即不能采用这种创建对象的方式。
2. 类中的static 变量在整个类,所有对象中都有效,所以采用 对象的静态成员指针来实现,所以首先声明一个静态指针:
static Object * _instance;3. 需实例化 _instance, 并且在实例化之前不需要创建类的实例,所以必须创建一个静态成员函数(静态函数只需要模拟一个this指针即可, 同类的成员函数一样具有访问private变量和函数的功能),即:
m_obj1 == m_obj2 // 内存中的位置和数据一致static Object * Instance();Object *m_obj1 = Object.Instance();Object *m_obj2 = Object.Instance();
例子如下:
#ifndef SINGLE_TON_H#define SINGLE_TON_H//define singleton classclass Singleton{public:static Singleton * Instance();Singleton * Instance1();protected:Singleton();private:static Singleton* _instance; // global unique object for user reference};#endif#include <stdio.h>#include "singleton.h"Singleton* Singleton::_instance = NULL;Singleton::Singleton(){printf("This is singleton protected construct function\n");}Singleton* Singleton::Instance(){if (_instance == NULL ){_instance = new Singleton(); }return _instance;}Singleton * Singleton::Instance1(){if (_instance == NULL ){_instance = new Singleton(); }return _instance;}int main(){Singleton *sng = Singleton::Instance();Singleton *sng1 = Singleton::Instance();if ( sng1 == sng ){printf("sng == sng1 \n");}return 0;}
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- 安卓入门——拨打电话和发送短信案例
- << Oracle高可用>>部分书面作业 - 第七课 Data Gaurd 设计和管理
- spring面试题集锦(收藏)
- Yii 给form表单 添加class
- 信号与信号量的区别:
- 单例模式
- java的Date日期增加和减少计算
- java开发经验分享
- grails中 grails generate-all错误解决方法
- 如何让xenserver 6.0能够挂载ntfs文件系统的硬盘
- 归并排序
- << Oracle高可用>>部分书面作业 - 第八课 Data Gaurd 故障分析和处理
- 关于ios中编译ffmpeg0.9.2库
- 使用五种以上方式获取一个文件的扩展名