C#单例模式讲解及源码
首先何为单例模式:
简单说就是保证一个类仅有一个实例,并提供一个访问它的全局访问点。而最好的办法就是让该类自身负责保存它的唯一实例。这个类可以保证没有其他的实例可以被创建,并且它可以提供一个访问该实例的方法。
运用场景:
像项目中,我们IOC处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例.
第一种不考虑线程的示例如下:
然后我们去使用该类,如果通过以往的方式来使用,当然会报错,具体请看下图:
正确的使用方式应该是通过该类的全局访问点来得到该类的实例 如下图:
第二种多线程的示例如下:
应用场景比喻在多线程程序中,多个线程同时访问Singleton这个类时,就有可能会创建多个实例,那么就失去了,单例模式的意义了。那么我们处理的办法就是,给进程加上一把锁,只允许一个进程访问,其它的进程进行等待。
具体代码请看下图:
第三种双重锁定考虑线程安全的单例模式 示例如下:
现在这样,我们就不用每次都给线程加锁,而是在实例未被创建的时候加锁处理,这样也保证了线程的安全。
注意:为什么要在锁里面再进行判断,你们想想看,第一个线程创建了实例,第二个线程还是可以创建实例,这样就失去了单例的意义了 ,所以我相信你懂得。
源码下载:C#单例模式

浙公网安备 33010602011771号