设计模式:单例模式

单例模式:
个人认为单例模式是设计模式中最为简单、最为常见、最容易实现,也是最应该熟悉和掌握的模式。且不说公司企业在招聘的时候为了考察员工对设计的了解和把握,考的最多的就是单例模式。

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

由于只要生成一个实例,所以类型的构造函数必须设为私有函数或者protected类型,禁止他人调用,我们定义一个静态函数,在其中调用构造函数创建唯一的实例:

#include <iostream>
using namespace std;
class Singleton{
    public:
    static Singleton* Instance();
    protected:
    Singleton();
    private:
    static Singleton* _instance;
};

Singleton* Singleton::_instance = NULL;
Singleton::Singleton(){
    cout<<"Singleton...."<<endl;
}
Singleton* Singleton::Instance(){
    if (_instance == NULL){
        _instance = new Singleton();
    }
    return _instance;
}

int main(int argc,char* argv[])
{
    Singleton* sgn = Singleton::Instance();
    return 0;
}

上面的方法在多线程下不能正常工作,需要用同步锁,先判断实例是否为null,若为null,那就获得锁,再次判断是否为null,然后来决定是否创建唯一实例,这样就能避免多线程相互冲突

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值