单例模式

xiaoxiao2021-02-27  178

单例模式,保证了一个类仅有一个实例,并提供一个访问它的全局访问点。

  单例模式是我唯一一个体验过效果的模式,在qt窗体编程的时候,有时候主界面仅需要出现一个实例,所以就给主界面用上了单例模式,方便以后无论在哪个子窗口中,都能访问主窗口的公有成员,这个模式解决了我很多困扰。

  首先,若是在程序中没有出现多个线程的情况,可以采用以下方式实现单例模式:

[csharp]  view plain  copy class Single       {           private static Single instance;           private Single()           {              }              public static Single getInstacnce()           {               if (instance == null)               {                   instance = new Single();               }               return instance;           }       }   但是,这个仅限于无线程的时候,一旦出现线程后,就会出现问题,就是第一个线程进入了if,但是还没有创建实例的时候,另一个线程也进入了if,这个时候就会出现两个,甚至是多个实例。

  既然有缺陷,那么肯定有改进的方法,

1、双重锁定

[csharp]  view plain  copy class Single       {           private static Single instance;           private static readonly object syncRoot = new object();           private Single()           {              }              public static Single getInstacnce()           {               if (instance == null)               {                   lock (syncRoot)                   {                       if (instance == null)                       {                           instance = new Single();                       }                   }                               }               return instance;           }       }   2、静态初始化

[csharp]  view plain  copy class Single       {           private static readonly Single instance = new Single();           private Single()           {              }              public static Single getInstacnce()           {               return instance;           }       }  
转载请注明原文地址: https://www.6miu.com/read-12726.html

最新回复(0)