? ? ??从小就非常反感考试。由于每次考试完无论是谁,碰见你的第一句问候语就是:考试考得怎么样啊?期末成绩出来了吗?……所以从小就非常害怕成绩单的出现,由于成绩单仅仅要不出现,自己就能够任意编篡,问自己考得怎么样?当然往好里说吧!还行吧!挺好的……
? ? 由于考试考得好不好。是由自己内心来推断的,考得好,我当然希望告诉他人;可是考得不好,我也不想让他人知道。所以仅仅要蒙混过关就可!? ? 这样就谈到了今天的主题-单例模式,某件事情我仅仅想让他出现一次,而非每次点击都出现,这就是所谓的实例化,实例化与否的过程事实上就是和考试考得好不好的过程一样,应该由自己来推断,要勇于承担责任,这才是当今一代的学习楷模。
? ? ? ? ? ?单例模式:保证一个类仅有一个实例,并提供一个訪问它的全局訪问点。
? ? ??通常我们能够让一个全局变量使得一个对象被訪问,但它不能防止你实例化多个对象。一个最好的办法就是,让类自身负责保存它的唯一实例。这个类能够保证没有其它实例能够被创建。并且它能够提供一个訪问该实例的方法。
class Singleton
{
private static Singleton instance;
//程序执行时创建一个静态仅仅读的进程辅助对象
private static readonly object syncRoot = new object();
private Singleton ()
{
}
public static Singleton GetInstance()
{
lock (syncRoot ) //在同一个时刻加了锁的那部分程序仅仅有一个线程能够进入
{
if (instance ==null )
{
instance = new Singleton();
}
}
return instance;
}
? ? ?这段代码使得对象实例由最先进入的那个线程创建,以后的线程在进入时不会再去创建对象实例了。可是instance有没有被创建过实例根本不知道,所以优化之后:public static Singleton GetInstance()
{
if (instance == null) //先推断实例是否存在,不存在再加锁处理
{
lock (syncRoot) //在同一个时刻加了锁的那部分程序仅仅有一个线程能够进入
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
public sealed class Singleton //阻止发生派生。而派生可能会添加实例
{
private static class Singleton
{
//在第一次引用类的不论什么成员时创建实例。公共语言执行库负责处理变量初始化
private static readonly Singleton instance = new Singleton();
private Singleton() { }
public static Singleton GetInstance()
{
return instance;
}
}
饿汉式:public class Singleton //阻止发生派生,而派生可能会添加实例
{
private static class Singleton=null ;
{
private Singleton() { }
public static synchronized synchronized GetInstance()
{
if (Singleton ==null )
{
Singleton = new Singleton();
}
return instance;
}
}
? ? ??对于懒汉和饿汉的使用,由于饿汉式,即静态初始化的方式,它是类一载入就实例化的对象,所以要提前占用系统资源。然而懒汉式又要面临着多线程訪问的安全性问题,须要做双重锁定这种处理才干够保证安全。所以至于使用哪种方式。应该取决于实际的需求。
可是从c#的角度来看。饿汉式单例类应能够满足我们的需求。
原文:https://www.cnblogs.com/ldxsuanfa/p/10803232.html