JAVA设计模式-01. 单例(Singleton)模式

单例模式:顾名思义,即一个类,只有一个实例,并且这个类,自行负责实例化。很多时候在程序开发过程中,有一些类生成的实例作用完全一样,但是频繁的生成或销毁对象,加大了内存的开销。所以就可以使用单例模式,生成全局唯一对象,供全局使用。

  1. 单例模式包含以下两个步骤:

    • 将构造函数设为私有(private),防止new出新对象;
    • 创建一个静态方法(如getlnstance()方法),代替构造的作用。在此静态方法中,创建实例或获取已经生成的实例。
  2. 单例模式的使用场景:

    • 全局仅一个需要一个实例。如日志输出,连接数据库;
    • 想要更好的管理全局变量,如config类,过多的创建可能造成系统混乱;
    • 想要减少内存压力,减少GC。
  3. 单例模式一般有两种方法实现:懒汉模式饿汉模式

    • 懒汉模式:类加载时不生产实例,当第一次调用时才生成实例
    public class Log{
           private static volatile Log log;
           //将构造方法设为privete,禁止new新对象
           private Log(){}
           public static Log getlnstance(){
             if(log == null){
               synchronized(Log.class){
                 //双重检查
                 if(log == null){
                   log = new Log();
                 }
               }
             }
             return log;
           }
    }
    
    • 饿汉模式:类一但加载,就创建一个单例,当第一次调用获取实例的时候,实例已经存在
    public class Log{
           private static volatile Log log = new Log();
           //将构造方法设为privete,禁止new新对象
           private Log(){}
           //调用此方法时,Log的实例已经创建,可直接返回实例
           public static Log getlnstance(){
             return log;
           }
    }
    

你可能感兴趣的:(JAVA设计模式-01. 单例(Singleton)模式)