Java 中的单例(Singleton)模式是一种广泛使用的设计模式。单例模式的主要作用是保证在 Java 程序中,某个类只有一个实例存在。一些管理器和控制器常被设计成单例模式。
单例模式有很多好处,它能够避免实例对象的重复创建,不仅可以减少每次创建对象的时间开销,还可以节约内存空间;能够避免由于操作多个实例导致的逻辑错误。如果一个对象有可能贯穿整个应用程序的生命周期,而且起到了全局统一管理控制的作用,那么单例模式也许是一个值得考虑的选择。
单例模式有很多种写法,大部分写法都或多或少有一些不足。下面将分别对这几种写法进行介绍。
1. 饿汉模式
1 | public class Singleton { |
从代码中我们看到,类的构造函数被定义为 private
的,保证其他类不能实例化此类,然后提供了一个静态实例并返回给调用者。饿汉模式是最简单的一种实现方式,静态变量在类加载的时候就对实例进行创建,实例在整个程序周期都存在。它的好处是静态变量只在类加载的时候创建一次实例,不存在多个线程创建多个实例的情况,避免了多线程同步的问题。它的缺点也很明显,即使这个单例没有用到也会被创建,而且在类加载之后就被创建,内存就被浪费了。
这种实现方式适合单例占用内存比较小,在初始化时就会被用到的情况。但是,如果单例占用的内存比较大,或单例只是在某个特定场景下才会用到,使用饿汉模式就不合适了,这时候就需要用到懒汉模式进行延迟加载。
more >>