推荐使用:饿汉式,懒汉式(双重检查),静态内部类,枚举
饿汉式:
class Singleton {
//1. 构造器私有化,外部能new
private Singleton() {
}
//2.本类内部能创建对象实例
private final static Singleton instance = new Singleton();
//3. 提供一个公有的静态方法,返回实例对象
public static Singleton getInstance() {
return instance;
}
}
懒汉式(双重检查):
class Singleton {
private static volatile Singleton instance;
private Singleton() {}
//给代码块加同步锁 并且双重检查
public static Singleton getInstance() {
if(instance == null) {
synchronized (Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
静态内部类:
// 静态内部类实现,推荐使用
class Singleton {
private static volatile Singleton instance;
//构造器私有化
private Singleton() {}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static synchronized Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
枚举:
//枚举,推荐使用
enum Singleton {
INSTANCE;
public void sayOK() {
System.out.println("ok~");
}
}