C#单例模式讲解及源码

首先何为单例模式:

           简单说就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。而最好的办法就是让该类自身负责保存它的唯一实例。这个类可以保证没有其他的实例可以被创建,并且它可以提供一个访问该实例的方法。

运用场景:

     像项目中,我们IOC处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例.

第一种不考虑线程的示例如下:

然后我们去使用该类,如果通过以往的方式来使用,当然会报错,具体请看下图:

正确的使用方式应该是通过该类的全局访问点来得到该类的实例 如下图:

第二种多线程的示例如下:

  应用场景比喻在多线程程序中,多个线程同时访问Singleton这个类时,就有可能会创建多个实例,那么就失去了,单例模式的意义了。那么我们处理的办法就是,给进程加上一把锁,只允许一个进程访问,其它的进程进行等待。

具体代码请看下图:

第三种双重锁定考虑线程安全的单例模式 示例如下:

 现在这样,我们就不用每次都给线程加锁,而是在实例未被创建的时候加锁处理,这样也保证了线程的安全。

注意:为什么要在锁里面再进行判断,你们想想看,第一个线程创建了实例,第二个线程还是可以创建实例,这样就失去了单例的意义了 ,所以我相信你懂得。

 

源码下载:C#单例模式

 

posted @ 2015-10-29 12:32  吴极限  阅读(587)  评论(0)    收藏  举报