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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 小编费力收集:给你想要的面试集合 1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JA...
    八爷君阅读 4,650评论 1 114
  • 前言 本文主要参考 那些年,我们一起写过的“单例模式”。 何为单例模式? 顾名思义,单例模式就是保证一个类仅有一个...
    tandeneck阅读 2,537评论 1 8
  • 我一直觉得自己是个幸运的人。在从小到大成长的过程中,无论家人、老师、同学都在需要的时候感动帮助我,才让我这个屁小孩...
    六只羊O阅读 536评论 0 3
  • 2019年4月9日农历三月初五星期二【广西佳鸿妈读经典感恩日记第198篇】系统读经198天 读经方法:137累积法...
    金秀阿美阅读 153评论 0 0
  • 破幻境-可望而不可及-天马行空-荒诞不羁 1、稳定拥有20条粗壮的财富管道,每天都可以看到钱宝宝来到我的身边,我的...
    雁菁阅读 163评论 0 0