Head First设计模式 C++实现-Singleton(单件模式)

这个算是设计模式里面最简单的一个模式了,不过它的运用范围还是挺广的.

模式定义:保证一个类仅有一个实例,并提供该实例的全局访问点.

作用范围:在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性/以及良好的效率.

有的人可能会认为可以利用全局变量来解决这个问题,但是全局变量会存在一个比较大的问题,对于全局变量来说,它是在程序开始前就分配了内存和资源,但是对于某些东西来说,如果你一直不用它,那么不就浪费了?我们需要的这种特殊的类是在我们需要的时候才能创建,而且永远都只有一个实例.

对于一个类来说,只要new就能产生一个实例,那么怎么才能让new不产生一个实例呢?new是通过构造器才能构造实例的,那么当我们把构造器设定为私有的那么不就能控制new了,然后再给一个公用的接口来创建对象,这样我们就可以在这个公用的接口里面做很多事情了,我们可以控制是否实例已经创建过一个了,没有创建则创建,创建了则范围该实例指针,这样就可以想创建就创建,并且只创建一个对象,但是这样还是会存在问题的,后面再分析,先用C++实现这个模式

class Single

{

private:

Single();

public:

static Single *CreateSingle() // 静态函数,作为类的函数,而非对象

{

         if(m_pObject == NULL)

                 m_pObject = new Single();

         return m_pObject;

}

private:

static Single* m_pObject; // 同上,也是作为类的变量

}

上面说到了这个会出现一些问题,那么问题会出在什么地方呢~

上面的代码只能在单线程里面有好的效果,对于多线程来说,这样的代码还是会出现多个实例.

这个就需要加一些判断才能达到在多线程下用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值