单例模式(singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- using System;
- //单例模式(singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- namespace StuDesignMode.Singleton
- {
- #region 单例模式
- //class Singleton
- //{
- // private static Singleton instance;
- // private Singleton() { }
- // public static Singleton GetInstance()
- // {
- // if (instance == null)
- // {
- // return new Singleton();
- // }
- // return instance;
- // }
- //}
- #endregion
- #region 多线程下的单例模式
- //class Singleton
- //{
- // private static Singleton instance;
- // //程序运行时创建一个静态只读的进程辅助对象
- // private static readonly object syncRoot = new object();
- // private Singleton() { }
- // public static Singleton GetInstance()
- // {
- // if (instance == null) //先判断实例是否存在,不存在再加锁处理
- // {
- // lock (syncRoot)
- // {
- // if (instance == null) //双重锁定
- // {
- // return new Singleton();
- // }
- // }
- // }
- // return instance;
- // }
- //}
- #endregion
- #region 单例模式-静态初始化
- /**
- * C#与公共语言运行库也提供了一种“静态初始化”方法,这种方法不需要开发人员显式地编写线程安全代码,即可以解决多线程环境下它是不安全的问题。
- * 这种静态初始化的方式是在自己被加载时就将自己实例化,所以被形象地称之为饿汉式单例类;在第一次被引用时,才会将自己实例化,被称之为懒汉式单例类。前者要提前占用系统资源,后者只有在第一次调用的时候才会占用系统资源。
- */
- public sealed class Singleton
- {
- private static readonly Singleton instance = new Singleton();
- private Singleton() { }
- public static Singleton GetInstance()
- {
- return instance;
- }
- }
- #endregion
- }