单例模式(Singleton)

2014-11-24 08:04:56 · 作者: · 浏览: 0

类静态成员

对于特定类类型的全体对象而言,访问一个全局变量对象有时是必要的。然而,全局变量是破坏封装的,对象需要支持特定类抽象的实现。类可以定义类静态成员,而不是定义一个可普遍访问的全局变量。

类的static成员的优点:static成员的名字是在类的作用域中,因此可以避免与其他类的成员或者全局对象名字冲突;可以实施封装。static可以是私有成员,而全局对象不可以;通过阅读程序容易看出static成员是与特定类相关联的。


实现


单线程
Class Singleton
{
     private:
          static int number;
          static Singleton * singleton;
     protected:
          Singleton();
     public:
          static Singleton * getSingle();
}

int number = 0;
Singleton singleton = NULL;
Singleton * getSingle()
{
     if(number == 0)
     {
          singleton =  new Singleton();
     }
     return singleton;
}


多线程
Class Singleton
{
     private:
          static int number;
          static Singleton * singleton;
          static object syncObject *syncObj;//新建锁
     protected:
          Singleton();
     public:
          static Singleton * getSingle();
}

int number = 0;
Singleton * singleton = NULL;
Singleton * getSingle()
{
     if(number == 0)
     {
          lock(syncObj);//第一次创建实例的时候加锁
          if(number == 0){
              singleton =  new Singleton();
              number = 1;
          }
     }
     return singleton;
}