一个继承单例,临界区的类CEStnDefinition

template <class T> 
class Singleton
{
public:
	static T* Instance()
	{
		static T	t;
		return &t;
	}
	
protected:
	Singleton(){ }
	virtual ~Singleton(){ }
	
private:
	Singleton(const Singleton& source){ }
};

这是一个单例类,在Instance()中定义一个static  T t;该类得所有对象调用这个函数时将共享这个static变量,由于Instance()又是Singleton的成员函数,所以Singleton的所有对象都共享这个静态局部变量

单例模式:单例模式是一种常用的设计模式,核心结构是一个称为单例类的特殊类,单例模式保证系统只有一个对象而且易于外界访问,从而对实例个数控制而且节约系统资源,如果希望系统中只有一个类得对象,单例模式是最好的选择。通常构造函数是私有的,防止外界进行实例化,接口通常被定义成static成员函数来获取实例。


class CBaseLocker
{
public:
	CBaseLocker()
	{
#ifndef _ACE_WRAPPER_
		::InitializeCriticalSection(&m_cs);
#endif
	}
	virtual ~CBaseLocker()
	{
#ifndef _ACE_WRAPPER_
		::DeleteCriticalSection(&m_cs);
#endif
	}

	void Lock()
	{
#ifndef _ACE_WRAPPER_
		::EnterCriticalSection(&m_cs);
#else
		ACE_GUARD(ACE_SYNCH_MUTEX, monitor, lock_);
#endif
	}

	void Unlock()
	{
#ifndef _ACE_WRAPPER_
		::LeaveCriticalSection(&m_cs); 
#else
#endif
	}

private:
#ifdef _ACE_WRAPPER_
	ACE_SYNCH_MUTEX		lock_;
#else
	CRITICAL_SECTION	m_cs;//临界区
#endif
};
--这是关于临界区使用的类声明,提供了几个使用临界区的接口


class CEStnDefinition : public Singleton<CEStnDefinition>
					  , public CBaseLocker
{
public:
	// 装载基础信息
	BOOL LoadBasicInfo();
	BOOL GetLineOperatingVehicle(CMapLineOperatingVehicle& mapLineOperVehi);
	BOOL GetFenceInfo(CMapLineRegin& mapLineFence);
	//BOOL GetDockingRegion(CArrayDockingRegion& arrDockRegion, CMapLineDockingStnRgn& mapLineDockingStnRgn);
	CAcliBasicInfo& GetAcliBasicInfo()
	{
		return m_AcliBasicInfo;
	}

private:
	CAcliBasicInfo				m_AcliBasicInfo;				// 基础数据
	CADOAccessor*				m_pDBAccess;
	BOOL						GetDBAccess();
};
这是一个多重继承的类,这样这个类继承了单例类的接口和临界区的接口,这个类中需要访问数据库,数据库访问有时需要这种模式。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值