单例模式

保证一个类仅有一个实例,并提供一个全局访问点。

饿汉式

1
2
3
4
5
6
7
8
9
10
// 在类初始化时,已经自行实例化  
public class Singleton {
private Singleton() {};

private static Singleton instance = new Singleton();

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

懒汉式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 在第一次调用的时候实例化自己   
public class Singleton {
private Singleton() {}

private static volatile Singleton instance = null;

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

内部类

1
2
3
4
5
6
7
8
9
10
11
12
// 属于懒汉式
public class Singleton {
private Singleton() {}

private static class Holder {
private static Singleton instance = new Singleton();
}

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

参考