首页 > 代码库 > 单例模式

单例模式

1.什么是单例模式?

单例模式就是确保一个类只有一个实例,而且自行实例化向整个系统提供唯一实例。

单例模式分为饿汉式单例类和懒汉式单例类。

饿汉式单例类:类加载时就进行实例化。

懒汉式单例类:第一次引用类时才进行实例化。

 

2.饿汉式单例类例子

    /// <summary>    

   /// 饿汉式单例类    

  /// </summary>    

  public class Singleton    

    {       

        private static Singleton _instance = new Singleton();

        private Singleton()//构造函数为私有的,该类不能被继承     

        {

        }

        public static Singleton Getinstance()       

       {            

           return _instance;        

       }          

   }

当类被加载时,类的私有构造函数就会被调用,单例类的唯一实例就被创建出来了,单例类一个最重要的特点就是私有构造函数,从而避免外界利用构造函数创造出任意多的实例。

4.懒汉式单例类的例子

 

public class Lsingleton     {     

 

         private static Lsingleton _singleton = null;      

         private Lsingleton()        

        {

 

        }

 

        public static Lsingleton Getinstance()       

 

       {            

 

       if (_singleton == null)           

 

       {               

 

               

 

             _singleton = new Lsingleton();              

 

          }      

          

        }            

 

       return _singleton;        

 

    }    

}

 懒汉式是第一次被调用的时候创建唯一模式。

 

 

5.多线程下的单例模式

/// <summary>    

/// 多线程下的单例模式   

  /// </summary>    

public class Lsingleton     {      

         private static Lsingleton _singleton = null;       

         private static  object _lock = new object();

         private Lsingleton()        

        {

        }

        public static Lsingleton Getinstance()        

       {            

       if (_singleton == null)            

       {                

          lock(_lock)                

          {                    

             _singleton = new Lsingleton();               

          }            

        }            

       return _singleton;        

    }    

}

6.单例模式的优点

  由于单例模式在内存中只有一个实例,减少了内存的开支,特别是一个对象需要频繁的创建和销毁,而创建和销毁的性能又无法优化时单例模式的优势非常明显。

  单例模式只生成一个实例,减少了系统性能的开销。

  单例模式可以避免对资源的多重占用。例如一个写文件的动作由于只有一个实例存在内存中,避免了对同一资源文件的同时操作。

  单例模式可以在系统设置全局的访问站点,优化和共享资源的访问,例如可以设计一个单例类负责所有数据表的映射处理。

 

单例模式