单例模式

单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。

  在我的工作过程中,我发现所有可以使用单例模式的类都有一个共性,那就是这个类没有自己的状态,换句话说,这些类无论你实例化多少个,其实都是一样的,而且更重要的一点是,这个类如果有两个或者两个以上的实例的话,我的程序竟然会产生程序错误或者与现实相违背的逻辑错误。

   这样的话,如果我们不将这个类控制成单例的结构,应用中就会存在很多一模一样的类实例,这会非常浪费系统的内存资源,而且容易导致错误甚至一定会产生错误,所以我们单例模式所期待的目标或者说使用它的目的,是为了尽可能的节约内存空间,减少无谓的GC消耗,并且使应用可以正常运作。

     我稍微总结一下,一般一个类能否做成单例,最容易区别的地方就在于,这些类,在应用中如果有两个或者两个以上的实例会引起错误,又或者我换句话说,就是这些类,在整个应用中,同一时刻,有且只能有一种状态。

主要讲解两种单例模式,1.懒汉模式2.饿汉模式

懒汉和饿汉的区别:

懒汉:在初始化类的时候,不创建唯一的实例,而是等到真正需要用到的时候才创建。必须加上同步,否则有可能依然创建多个实例。
饿汉:在初始化的时候,就创建了唯一的实例,不管是否需要用到。不需要自己加同步,一定产生唯一的实例。

1.懒汉模式

 public  class Singleton
    {
        //私有化构造函数
        private Singleton()
        {

        }
        //私有化对象
        private static Singleton leton;

        static object obj = new object();

        //接口方法
        public static Singleton Instance()
        {
          //双重加锁
            if (leton == null)
            {
                //解决并发
                lock (obj)
                {
                    if (leton == null)
                    {
                        return leton = new Singleton();
                    }
                
                }
            }
        
                return leton;
          
           

        }

        //方法提示
        public void Result()
        {
            Console.WriteLine("懒汉模式");
        }

    }

2.饿汉模式

 public class EHan
    {
//私有构造函数
private EHan() { }
//创建实例
private static EHan eHan = new EHan(); public static EHan Instance() {
//返回实例
return eHan; } public void Result() { Console.Write("饿汉模式"); } }
原文地址:https://www.cnblogs.com/gbb44/p/10638794.html