单例模式

一、单例模式又叫做 Singleton模式,指的是一个类,在一个JVM里,只有一个实例存在。

二、原理
通过私有化构造方法,不让外部通过new方式得到对象实例。
单例模式分为饿汉模式和懒汉模式。

三、饿汉模式
此方式无论如何都会创建一个实例。
代码:

public class Man{
      //私有化其构造方法
      private Man(){
       }
    
      //用一个私有静态类属性指向一个实例
       private static Man instance = new Man();

       //用一个静态类方法,返回上述实例
       public static Man getInstance(){
             return instance;
       }
}

饿汉模式是立即加载的方式,无论是否会用到这个对象,都会加载。

三、懒汉模式
只有在调用getInstance()方法时,才会创建实例。
代码:

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

      //创建静态类变量,赋值为空
      private static Man instance = null;

      //
      public static Man getInstance(){
             //第一次调用时,发现instance不指向任何对象,便创造实例
             if (null == instance){
                    instance = new Man();
             }

            return instance;
      }
  
}

懒汉模式是延迟加载的方式,只有使用的时候才会加载。

四、两种方式的应用场合
饿汉模式:如果在构造方法里写了性能消耗较大,占时较久的代码,比如建立与数据库的连接,那么就会在启动的时候感觉稍微有些卡顿。

懒汉模式:使用懒汉式,在启动的时候,会感觉到比饿汉式略快,因为并没有做对象的实例化。 但是在第一次调用的时候,会进行实例化操作,感觉上就略慢。

如果业务上允许有比较充分的启动和初始化时间,就使用饿汉式,否则就使用懒汉式

五、单例模式的三要素

  1. 构造方法私有化
  2. 静态属性指向实例
  3. public static的 getInstance方法,返回第二步的静态属性

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