美文网首页
Java单例和static成员变量的区别 singleton v

Java单例和static成员变量的区别 singleton v

作者: StephenLau | 来源:发表于2019-05-27 10:06 被阅读0次
    public class StaticField {
        private static StringBuffer cache = new StringBuffer();
    
        public static void addString(String s){
            cache.append(s).append("/n");
        }
    
        public static void clear() {
            cache.setLength(0);
        }
    }
    
    public class Singleton {
        private static final Singleton ourInstance = new Singleton();
    
        public static Singleton getInstance() {
            return ourInstance;
        }
    
        private Singleton() {
        }
    
        private StringBuffer cache = new StringBuffer();
    
        public void addString(String s){
            cache.append(s).append("/n");
        }
    
        public void clear() {
            cache.setLength(0);
        }
    }
    

    static field会有以下的问题。

    不能继承基类、实现接口。
    无法进行依赖注入。不可以通过参数传递到其他方法。我觉得意义,单例根本不需要传递,单例在哪里都可以直接获取。
    不能在其他类中进行测试(mock)。

    如何选择?

    static成员变量是给不需要状态的情况下使用的,通常只放一堆函数,例如Math和其他Utils类。

    Singleton更为的灵活,更容易控制它的状态,可以实现接口,继承自其他类并给其他类继承。

    https://stackoverflow.com/questions/47325586/singleton-class-vs-static-methods-and-fields
    https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern

    相关文章

      网友评论

          本文标题:Java单例和static成员变量的区别 singleton v

          本文链接:https://www.haomeiwen.com/subject/tkjctctx.html