Singleton设计模式(C++)
来源:互联网 发布:中国光伏产业联盟数据 编辑:程序博客网 时间:2024/06/12 01:06
之所以引入Singleton设计模式的原因可以从《设计模式C++》中得来:
Singleton模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了,可能这也正是很多公司在招聘Java开发人员时候经常考察Singleton模式的缘故吧。
Singleton模式的结构图:
Singleton Pattern结构图
在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这个唯一的对象实例。通过提供一个staitc的接口instance来获得这个唯一的实例。
书中的代码例程:
代码说明
Singleton模式的实现无须补充解释,需要说明的是,Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。
下面是我自己的使用案例: 通过Singleton模式来共享刀具参数数据。通过采用boost共享指针实现Singleton模式。
//WorkState.h#pragma onceclass WorkState{public:~WorkState(void);static boost::shared_ptr<WorkState> GetInstance();//刀具参数 int cutter_type; int cutter_num; double cutter_diameter; double cutter_B1; double cutter_B2; double cutter_radius; double cutter_e; double cutter_f; double cutter_Lc;protected:WorkState(void);private:static boost::shared_ptr<WorkState> uniqueInstance;};//WorkState.cpp#include "StdAfx.h"#include "WorkState.h"boost::shared_ptr<WorkState> WorkState::uniqueInstance;WorkState::WorkState(void):cutter_type(1),cutter_num(1),cutter_diameter(10),cutter_B1(0),cutter_B2(0),cutter_radius(0),cutter_e(0),cutter_f(0),cutter_Lc(0){}WorkState::~WorkState(void){}boost::shared_ptr<WorkState> WorkState::GetInstance(){ if (uniqueInstance.get()==0) { boost::shared_ptr<WorkState> ptr(new WorkState()); uniqueInstance=ptr; } return uniqueInstance;}
0 0
- Singleton设计模式(C++)
- Singleton模式(C++)
- Objective-c 单例设计模式(Singleton)
- 设计模式---单子(Singleton)
- 单子(Singleton)设计模式
- 单子(Singleton)设计模式
- [设计模式]单例类(Singleton)
- 设计模式(十四)Singleton
- 设计模式(一):Singleton模式
- 设计模式(一):Singleton模式
- 设计模式---单例模式(singleton)
- 设计模式--单件模式(Singleton)
- 设计模式--单例模式(Singleton)
- 设计模式--单例模式(Singleton)
- 设计模式之(四)Singleton模式
- 设计模式-单例模式(Singleton)
- 设计模式(一)Singleton 模式
- 【设计模式】-单例模式(Singleton)
- Android 对话框(Dialog)大全
- test
- Spark分布式计算和RDD模型研究
- 【Android开发】View的平移、缩放、旋转以及位置、坐标系
- 高通Qualcomm vuforia SDK4.0相关
- Singleton设计模式(C++)
- spring四种依赖注入方式
- [leetcode] 68.Text Justification
- 卡尔曼滤波器 opencv
- 解决办法:Synchronous XMLHttpRequest on the main thread is deprecated because of its
- CSS: dl,dt,dd,ul,li,ol区别及应用
- 过河 2005年NOIP全国联赛提高组
- 使用XMLReader接口解析XML-个人记录
- POJ 1021 2D-Nim