C++设计模式-单件模式-单件类

单件模式也称为单例模式或者单态模式,这是一种创建型模式,创建只能产生一个对象实例的类。

定义:单件(Singleton )模式保证一个类仅有一个实例,并提供一个访问它的全局访问点。

要点:

1. 为了防止外界调用产生多个实例,将构造方法、析构方法、拷贝构造方法、赋值重载方法都作为protected 。

2. instance() 方法产生对象方式有两种:使用局部static 对象,生命期在首次进入局部生命期产生,在程序结束时销毁;通过new 产生新对象,在析构方法中delete 对象。

3.获取单件实例调用方式:Singleton::instance() 获取对象指针。

4. 解决多线程资源竞争条件。使用著名的“双检测锁定”办法来解决,即在锁定前和锁定后都检测对象是否产生,这样既能保证加锁效率又能保证单件实例的唯一性。

应用:

//MainCtl.h

class CMainCtrl

{

public:

//支持单件类的相关函数

static CMainCtrl* GetInstance();

static void Destroy();

static void StopSignal(int lSig);

private:

static CMainCtrl* m_spMainCtrl;

//主控类构造函数和析构函数

CMainCtrl();

~CMainCtrl();

CMainCtrl(const CMainCtrl& temp);

CMainCtrl &operator=(const CMainCtrl& temp);

}

//该范例通过把类的构造函数封装为私有的,这样就无法在堆和栈上创建一个属于该类的对象了,只能通过调用静态成员函数GetInstance来生成对象,这样,下次在通过GetInstance函数生成这个对象的时候,这个对象还是之前的那个,这样就达到了我们的目的,既保证了这个类只会创建出一个属于该类的对象出来。

//MainCtl.cpp

CMainCtrl * CMainCtrl::m_spMainCtrl = NULL;

//支持单件类的相关函数

CMainCtrl * CMainCtrl::GetInstance()

{

if (NULL == m_spMainCtrl)

{

NEW(m_spMainCtrl, CMainCtrl);

}

return m_spMainCtrl;

}

void CMainCtrl::Destroy()

{

DELETE(m_spMainCtrl);

}

void CMainCtrl::StopSignal(int lSig)

{

if (NULL != m_spMainCtrl)

{

m_spMainCtrl->Stop();

}

}

int main()

{

CMainCtrl* p = CMainCtrl::GetInstance();

return 0;

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值