单例模式:所谓单例模式就是确保类只有一个对象,并提供一个公共的访问接口。下面根据概念分析单例模式。

1、确保一个实例,就是不让程序随处可以new一个对象,这个怎么实现呢?运用私有构造函数。

public class Singleton
{
    private Singleton()
    {

    }  
}

这样Singleton就不能new对象了。

2、唯一的对象在何处?在内部定义一个静态的Singleton对象,为什么要定义静态的呢,因为静态对象属于类。然后提供一个公共的访问接口即可

public class Singleton
{
    private Singleton()
    {

    }  
    
    private static Singleton singleton;
    
    public static Singleton GetInstance()
    {
        if(singleton==null)
        {
            singleton=new Singletion();
        }
        
        return singleton;
    }
}
单例模式就算完成了,但是这里存在个问题,对于多线程,可能同时存在几个线程同时走到if(singleton==null)这儿,这样就会new出多个singleton实例,这也不能保证其唯一。对于这种多线程的情况,我们可以加进程锁机制,确保在判断这儿只会有一个线程访问,改进如下:
public class Singleton
{
    private Singleton()
    {

    }  
    
    private static Singleton singleton;
    //线程锁
    private static readonly object lockObj=new object();

    public static Singleton GetInstance()
    {
        //双重判断是为了提高性能
        if(singleton==null)
        {
            lock(lockObj)
            {
                if(singletion==null)
                {
                    singleton=new Singletion();
                }
            }
        }
        
        return singleton;
    }
}