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
原创粉丝点击