HENNG

Java设计模式 - Singleton

Java 设计模式 单例模式 Singleton


懒汉(线程安全)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//懒汉
public class Singleton {
private static Singleton singleton;

private Singleton() {

}

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

return singleton;
}
}

饿汉

1
2
3
4
5
6
7
8
9
10
11
12
//饿汉
public class Singleton {
private static final Singleton singleton = new Singleton();

private Singleton () {

}

public static Singleton getSingleton() {
return singleton;
}
}

静态内部类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//静态内部类
public class Singleton {
private static class SingletonHolder {
private static final Singleton singleton = new Singleton();
}

private Singleton() {

}

public static Singleton getSingleton() {

return SingletonHolder.singleton;
}
}

枚举

1
2
3
4
5
6
7
8
//枚举
public enum Singleton {
INSTANCE;

public void whateverMethod() {

}
}

double-lock

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//double-lock
public class Singleton {
private volatile static Singleton singleton;

private Singleton() {

}

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

return singleton;
}
}