• 面试:单例模式VS静态方法


    单例模式VS静态方法 - 起帆的博客 | Undervoid Blog

    什么时候应该用静态类而不是单例

    1. 如果你的单例类并没有保存任何状态性质的属性,而只是提供了一些公共方法,那么就应该考虑包含静态方法的类,因为 Java 在编译期的静态绑定特性,静态方法比单例类要快很多。但是请记住,在静态类中维护状态并不是一种推荐的做法,尤其是在并发执行的环境中,因为在多线程运行修改静态变量的状态时,如果不能正确地处理线程之间的关系,这可能会导致由于条件竞争而出现莫名其妙的问题。

    2. 另外,当你需要把一系列的 util 方法放到一个类当中时,应该用静态方法;除此之外,当你希望只对外提供一种资源访问的方式,那么就应该使用单例模式

    单例类和静态方法之间的区别

    这是我们的第二个关于单例和静态之间关系的问题。我之前说过,他们之间最本质的区别就是,一个代表对象,而另一个代表方法。下面是 Java 当中二者之间的其他不同之处。

    1. 静态类比单例模式的效率更高,因为静态方法在编译期就完成了静态绑定。
    2. 另外一个区别就是,是否支持覆写 (override)。因为 Java 中的静态方法是不能被覆写的,这就导致某些情况不够灵活。而你随时可以继承一个非 final 的单例类来覆写其中的方法。
    3. 在做单元测试的时候,静态类比单例类更难被 mock,因此也更难被测试。而单例类很容易被 mock 来执行单元测试。在使用 Junit 的时候,你可以更简单地为构造方法或普通方法传入单例类的 mock 对象来执行测试用例。
    4. 如果你需要维护一些状态信息,那么单例比静态类更合适。因为在静态类中维护状态信息很容易导致细微的 bug 。
    5. 单例对象可以被延迟初始化。而静态类总是在类被加载的时候就初始化。

    当你需要一个具有面向对象特性的类的时候,就用单例模式;而如果你只是把一些静态方法放到一个类中,那就用静态类。

  • 相关阅读:
    linux sysctl指令读取设置kernel参数
    python基础(三)
    关于Nacos启动报错 Unable to start embedded Tomcat
    【Qt之QSequentialIterable】使用
    设计模式-装饰模式
    【云原生之Docker实战】使用Docker部署WBO在线协作白板
    java从入门到精通二十九(Spring测试环境的简单部署)
    【数据结构】排序
    Android 13中的 Open Mobile API
    Linux系统中正则表达式的应用
  • 原文地址:https://blog.csdn.net/cpcpcp123/article/details/127908244