单例模式

  public class Singleton //三步走
  {
      private static Singleton instance = null;//第一步:定义私有静态属性
      private Singleton()      {           //第二步:构造函数私有化
      }
      public static Singleton GetInstance(){//第三步:提供一个静态方法,由类调用
          if(instance == null){
             instance = new Singleton();
           }
          return instance;
       }
  }

优点:

(1)由于系统中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象,单例模式无疑可以提高系统的性能。
(2)允许可变数目的实例。可以对单例模式进行扩展,设计指定个数的实例对象,即节省系统资源,又解决了由于单例对象共享过多有损性能的问题。

缺点:

        (1) 单例类的职责过重,在一定程度上违背了单一指责原则。因为单例模式即提供业务方法,又提供了创建对象的方法,将对象功能和创建耦合在一起。
       (2)很多面向对象语言的GC垃圾回收技术,实例化的对象长期不使用,系统会认为是垃圾,自动销毁并回收资源,这将导致共享的单例对象状态的丢失。 

饿汉式单例:

          (1) 单例模式在整个应用程序的生命周期中只存在一个实例
          (2) 懒汉式单例就是这个单例类的这个唯一实例new是在第一次使用 GetInstance()时实例化的
   (3) 如果不调用 GetInstance()的话,这个实例是不会存在的,即为 null
  (4) 形象点说呢,就是你不去动它的话,它自己是不会实例化的,所以可以称之为懒汉。

饿汉式单例:
 (1)其由于肚子饿了,所以到处找东西吃,人也变得主动了很多,所以根本就不需要别人来催他实例化单例类的为一实例
 (2)其自己就会主动实例化单例类的这个唯一类。

public class Singleton
    {
        private static readonly Singleton singleton = new Singleton();

        private Singleton()
        {
        }

        public static Singleton GetInstance()
        {
            return singleton;
        }
}


你可能感兴趣的:(单例模式)