单例模式

1、饿汉式 (静态常量)

public class Singleton {

private final static Singleton INSTANCE = new Singleton();

private Singleton(){}

public static Singleton getInstance(){
return INSTANCE;
}
}

2、饿汉式(静态代码块)

public class Singleton {

private static Singleton instance;

static {
instance = new Singleton();
}

private Singleton() {}

public static Singleton getInstance() {
return instance;
}
}

3、懒汉式(线程不安全)

public class Singleton {

private static Singleton singleton;

private Singleton() {}

public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}

4、懒汉式(线程安全,同步方法)

public class Singleton {

private static Singleton singleton;

private Singleton() {}

public static synchronized Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}

5、懒汉式(线程安全,同步代码块)

public class Singleton {

private static Singleton singleton;

private Singleton() {}

public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
singleton = new Singleton();
}
}
return singleton;
}
}

6、双重检查[推荐用]

public class Singleton {

private static volatile Singleton singleton;

private Singleton() {}

public static Singleton getInstance() {
if (singleton == null) {
synchronized (Singleton.class) {
if (singleton == null) {
singleton = new Singleton();
}
}
}
return singleton;
}
}

7、静态内部类[推荐用]

public class Singleton {

private Singleton() {}

private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}

public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}

8、枚举[推荐用]

public enum Singleton {
    INSTANCE;
    public void whateverMethod() {

    }
}
原文地址:https://www.cnblogs.com/yuyangcoder/p/10019944.html