Let's learn what's singleton
单例(Singleton)
数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”。
什么是单例?
一个类有且仅有一个实例, 并提供一个可以访问它的全局访问点.
单例有什么用?
解决一个全局使用类的频繁创建与销毁.
怎么实现单例?
实现方案
- 隐藏类的构造方法
- 定义一个公有的静态方法, 通过它返回类的唯一实例
java实现
- DCL(Double Checked Lock)实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| public class Lazy4SafeDoubleCheck {
private static volatile Lazy4SafeDoubleCheck singleton = null;
private Lazy4SafeDoubleCheck() {
// 1. 避免反射创建多个实例
if(singleton != null){
throw new RuntimeException()
}
}
public static Lazy4SafeDoubleCheck getSingleton() {
if (singleton == null) {
synchronized (Lazy4SafeDoubleCheck.class) {
if (singleton == null) {
singleton = new Lazy4SafeDoubleCheck();
}
}
}
return singleton;
}
// 2. 避免反序列化创建多个实例
private Object readResolve() throws ObjectStreamException {
return singleton;
}
}
|
- 枚举实现
1
2
3
4
5
6
7
8
9
10
| public enum SingletonEnum {
/**
* 使用枚举实现的单例
*/
INSTANCE;
public void otherMethods() {
System.out.println("Something");
}
}
|