C# 中的单例模式示例

前言:

一、线程不安全的单例

懒汉模式,线程不安全,不建议使用。

    public class Singleton
    {
    
    
        private Singleton() {
    
     }

        private static Singleton singleton = null;

        public static Singleton CreateInstance()
        {
    
    
            if (singleton == null)
                singleton = new Singleton();

            return singleton;
        }
    }

二、使用锁实现单例

懒汉模式,线程安全

    public class Singleton
    {
    
    
        private Singleton() {
    
     }

        private static Singleton singleton = null;
        private static readonly object singletonLock = new object();

        public static Singleton CreateInstance()
        {
    
    
            if (singleton == null)
            {
    
    
                lock (singletonLock)
                {
    
    
                    if (singleton == null)
                        singleton = new Singleton();
                }
            }
            return singleton;
        }
    }

三、使用静态构造函数实现单例

饿汉模式,线程安全

    public class Singleton
    {
    
    
        private Singleton() {
    
     }

        private static readonly Singleton singleton = null;

        static Singleton()
        {
    
    
            singleton = new Singleton();
        }

        public static Singleton CreateInstance()
        {
    
    
            return singleton;
        }
    }

四、使用静态字段实现单例

饿汉模式,线程安全

    public class Singleton
    {
    
    
        private Singleton() {
    
     }

        private static readonly Singleton singleton = new Singleton();

        public static Singleton CreateInstance()
        {
    
    
            return singleton;
        }
    }

五、使用Lazy实现单例

懒汉模式,线程安全

    public class Singleton
    {
    
    
        private Singleton() {
    
     }

        private static readonly Lazy<Singleton> lazy =
            new Lazy<Singleton>(() => new Singleton());

        public static Singleton CreateInstance()
        {
    
    
            return lazy.Value;
        }
    }

猜你喜欢

转载自blog.csdn.net/Upgrader/article/details/107475409