设计模式系列(5)懒汉式单例模式

1.概念

  单例模式是一种对象创建模式,使用单例模式,可以保证一个类只生成唯一的实例对象。也就是说,在整个程序空 

  间中,该类只存在一个实例对象。

  

  GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能够对该实例加以访问的全局访问方法。


2.为什么使用单例模式?

  在应用系统开发中,我们常常有以下需求:

  -在多线程之间,比如初始化一次socket资源。比如,servlet环境,共享同一个资源或者操作同 一个对象;

  -在整个程序空间中使用全局变量,共享资源;

  -大规模系统中,为了性能的考虑,需要节省对象的创建时间等。

  因为Singleton模式可以保证为了一个类只生成唯一的实例对象,所以这种情况,Singleton模式就派上用场。


3.实现单例模式的常用步骤

  a) 构造函数私有化;

  b) 提供一个全局静态方法(全局访问点);

  c) 在类中定义一个静态指针,指向本类的变量的静态变量指针。


4.懒汉式单例和饿汉式式单例,本文先实例懒汉式代码。

   懒汉式:

   

#include <iostream>
using namespace std;

class Singleton
{
private:
  Singleton()
  {
      m_singler = NULL;
      m_count = 0;
      cout << "构造函数 Singlton...do" << endl;
  }

public:
  static Singleton *getInstance()
  {
      if(m_sigler == NULL) //懒汉式:1.每次获取实例都要判断;2.多线程会有问题。
      {
          m_singler = new Singleton;
      }
      return m_singler;
  }
  static void printT()
  {
      cout << "m_count:" << m_count << endl;
  }
private:
  static Singleton *m_singler;
  static int m_count;
};

Singleton *Singleton::m_siger = NULL;//懒汉式没有创建单例对象
int Singleton::m_count = 0;

void main()
{
    cout << "懒汉式" << endl;
    Singleton *p1 = Singleton::getInstance();//只有在使用时,才会创建对象
    Singleton *p2 = Singleton::getInstance();
    if(p1 != p2)
    {
        cout << "不是同一个对象" << endl;
    }
    else
    {
        cout << "是同一个对象" << endl;
    }

    p1->printT();
    p2->printT();


    return;
}
  

    注意,懒汉式只有在调用函数getInstance的时候才会创建对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪流之源

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值