Singleton设计模式(C++)

之所以引入Singleton设计模式的原因可以从《设计模式C++》中得来:

           Singleton模式解决问题十分常见,我们怎样去创建一个唯一的变量(对象)?在基于对象的设计中我们可以通过创建一个全局变量(对象)来实现,在面向对象和面向过程结合的设计范式(如C++中)中,我们也还是可以通过一个全局变量实现这一点。但是当我们遇到了纯粹的面向对象范式中,这一点可能就只能是通过Singleton模式来实现了,可能这也正是很多公司在招聘Java开发人员时候经常考察Singleton模式的缘故吧。

           Singleton模式的结构图:



Singleton Pattern结构图

     在Singleton模式的结构图中可以看到,我们通过维护一个static的成员变量来记录这个唯一的对象实例。通过提供一个staitc的接口instance来获得这个唯一的实例。

         书中的代码例程:



代码说明

Singleton模式的实现无须补充解释,需要说明的是,Singleton不可以被实例化,因此我们将其构造函数声明为protected或者直接声明为private。


下面是我自己的使用案例: 通过Singleton模式来共享刀具参数数据。通过采用boost共享指针实现Singleton模式。

//WorkState.h

#pragma once

class 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;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值