一、单线程

    public class Singleton
    {
        private static Singleton instance;
        int x, y;

        private Singleton()
        {
        }
        public static Singleton Instance
        {
            get
            {
                if( instance == null )
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }

        private Singleton( int x, int y )
        {
            this.x = x;
            this.y = y;
        }

        public static Singleton GetInstance(int x,int y)
        {
            if( instance == null )
            {
                instance = new Singleton( x, y );
            }
            else
            {
                instance.x = x;
                instance.y = y;
            }

            return instance;
        }
    }

二、适用于多线程

    public class MultiThreadSingleton
    {
        private static volatile MultiThreadSingleton instance = null;

        private static object lockHelper = new object();

        private MultiThreadSingleton()
        {
        }

        public static MultiThreadSingleton Instance
        {
            get
            {
                if( instance == null )
                {
                    lock( lockHelper )
                    {
                        if( instance == null )
                        {
                            instance = new MultiThreadSingleton();
                        }
                    }
                }
                return instance;
            }
        }
    }

三、适用于多线程与单线程

    public class AllSingleton
    {
        public static readonly AllSingleton Instance = new AllSingleton();

        private AllSingleton()
        {
        }
    }

四、一个线程安全,懒实现的方式

public sealed class Singleton
{
   
    private static readonly Lazy<Singleton> instanceHolder =
        new Lazy<Singleton>(() => new Singleton());

    private Singleton()
    {
        ...
    }

    public static Singleton Instance
    {
        get { return instanceHolder.Value; }
    }
}

 

 posted on 2022-04-24 08:28  絆τ  阅读(22)  评论(0编辑  收藏  举报