单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
JAVA单例模式的几种实现方法
1.饿汉式单例类
package pattern.singleton;
//饿汉式单例类.在类初始化时,已经自行实例化
public class Singleton1 {
//私有的默认构造子
private Singleton1() {}
//已经自行实例化
private static final Singleton1 single = new Singleton1();
//静态工厂方法
public static Singleton1 getInstance() {
return single;
}
}
2.懒汉式单例类
package pattern.singleton;
//懒汉式单例类.在第一次调用的时候实例化
public class Singleton2 {
//私有的默认构造子
private Singleton2() {}
//注意,这里没有final
private static Singleton2 single;
//只实例化一次
static{
single = new Singleton2();
}
//静态工厂方法
public synchronized static Singleton2 getInstance() {
if (single == null) {
single = new Singleton2();
}
return single;
}
}
枚举类是实现单例的最佳方法:一般我们所做的单例,如果没有在构造函数进行控制,则通过反射 方式可以创建出新的实例来,如果枚举类 这是真正的单例。
枚举类的思想是通过共有的静态的final域为每个枚举常量导出实例的类。枚举相当于单例的泛型化。
单例模式本质:控制实例的数目。