应用场景
如果要保证系统里一个类最多只能存在一个实例时,我们就需要单例模式。这种情况在应用中经常碰到,例如缓存池、数据库连接池、线程池、一些应用服务实例等。在多线程环境中,为了保证实例的唯一性其实并不简单。
最简单的单例
源代码
Singleton.java
package pattern.part2.chapter3; public class Singleton { private static Singleton instance = new Singleton(); // other useful fields... private Singleton() { } public static Singleton getInstance() { return instance; } // other useful methods... }
代码注解
Singleton类只有一个构造方法,它是被private修饰的,客户对象无法创建该类实例。
我们为此单例实现的全局访问点是public static Singleton getInstance()方法。
注意:instance变量是私有的,外界无法访问。此实现是线程安全的,当多个线程同时去访问该类的getInstance()方法时,不会初始化多个不同的对象,这是因为,JVM(Java Virtual Machine)在加载此类时,对于static属性的初始化只能由一个线程执行且仅一次。