懒汉式
class Singleton1 {
private Singleton1() {
}
private static final Singleton1 singleton1 = new Singleton1();
public static Singleton1 getInstance() {
return singleton1;
}
public void say() {
System.out.println("hi");
}
}
饿汉式
class Singleton4 {
private Singleton4() {
}
private static Singleton4 instance;
public static synchronized Singleton4 getInstance() {
if (instance == null) {
instance = new Singleton4();
}
return instance;
}
public void say() {
System.out.println("hi");
}
}
双重检查锁模式(DCL)
class Singleton5 {
private Singleton5() {
}
private static volatile Singleton5 instance;
public static Singleton5 getInstance() {
if (instance == null) {
synchronized (Singleton5.class) {
if (instance == null) {
instance = new Singleton5();
}
}
}
return instance;
}
public void say() {
System.out.println("hi");
}
}
静态内部类
class Singleton2 {
private Singleton2() {
}
private static class Singleton2Holder {
private static final Singleton2 singleton2 = new Singleton2();
}
public static Singleton2 getInstance() {
return Singleton2Holder.singleton2;
}
public void say() {
System.out.println("hi");
}
}
枚举类
class Singleton6 {
private Singleton6() {
}
public enum SingletonEnum6 {
INSTANCE;
private Singleton6 instance;
SingletonEnum6() {
instance = new Singleton6();
}
public Singleton6 getInstance() {
return instance;
}
}
public void say() {
System.out.println("hi");
}
}