zoukankan      html  css  js  c++  java
  • 有关单例模式的问题

     

    无意中发现有两种单例的方式:

    public class Singleton {
        
        public static final Singleton INSTANCE = new Singleton();
        
        private Singleton(){}
    }

    优点:易读,性能稍高。

     

    public class Singleton {
        
        private static final Singleton INSTANCE = new Singleton();
        
        private Singleton(){}
        
        public static Singleton getInstance(){
            return INSTANCE;
        }
    }

    优点:灵活性高。

    我平常使用的是这个样子的

    public class Singleton {
        
        private static Singleton INSTANCE = new Singleton();
        
        private Singleton(){}
        
        public static Singleton getInstance(){
            if(INSTANCE == null){
                INSTANCE = new Singleton();
            }
            return INSTANCE;
        }
    }

    其中的区别是使用了final。

    很是不懂前两种与后一种的区别,于是经过百度发现:

    final修饰变量的功能是,一次初始化不能再被修改,既然是私有变量,就只考虑内部对这个变量的处理了,如果需要修改就不加final

    而在单例模式中,如果存在释放资源的情况下,就不能加final修饰了,比如针对你贴的这个单例,如果提供方法:

    public void releaseInstance(){
        if(instance != null){
            instance = null;
        }
    }

    释放资源之后,如果需要重新使用这个单例,就必须存在重新初始化的过程,所以不能加final,对于不需要释放资源的情况,可以加final

    至于要使用哪种方式,要不要加final修饰,可以根据实际情况而定。

  • 相关阅读:
    go-go协程
    linux-pclint代码检测
    linux-32位-交叉编译openssl
    go-json类
    mysql-定时任务
    go-IO操作
    go-异常处理-error-panic-recover
    go-defer语句
    go-select
    go-指针
  • 原文地址:https://www.cnblogs.com/cRaZy-TyKeIo/p/3561154.html
Copyright © 2011-2022 走看看