java实现:
饿汉
public class Singleton {
private static Singleton singleton=new Singleton();
private Singleton(){
}
public static Singleton getInstance() {
return singleton;
}
}
public class SingletonValidation {
public static void main(String[] args) {
// private构造器不能实例化
// Singleton Singleton=new Singleton();
Singleton ins1=Singleton.getInstance();
Singleton ins2=Singleton.getInstance();
System.out.println(String.format("ins1==ins2:%b",ins1==ins2));
}
}
懒汉
package singleton;
public class LazySingleton {
private static LazySingleton lazySingleton;
private LazySingleton() {
}
public static synchronized LazySingleton getInstance() {
if(lazySingleton==null) {
lazySingleton=new LazySingleton();
}
return lazySingleton;
}
}
双重检查
package singleton;
public class DoubleCheck {
private static volatile DoubleCheck doubleCheck;
private DoubleCheck() {
}
public static DoubleCheck getInstance() {
if(doubleCheck==null) {
synchronized(DoubleCheck.class) {
if(doubleCheck==null) {
doubleCheck=new DoubleCheck();
}
}
}
return doubleCheck;
}
}
静态内部类
package singleton;
public class Inner {
private Inner() {
}
private static class InnerInstance{
private static final Inner INSTANCE=new Inner();
}
public static Inner getInstance() {
return InnerInstance.INSTANCE;
}
}
枚举
package singleton;
public enum SingleEnum {
INSTANCE;
public void doSomething() {
}
}