0%

设计模式之单例模式

什么是单例模式

确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

UML图

普通单例模式代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* @author iisheng
* @date 2019/10/17 13:11:18
* @description 线程不安全的单例
*/
public class Singleton {
private static Singleton singleton = null;

// 限制产生多个对象
private Singleton() {

}

// 通过该方法获取实例对象
public static Singleton getSingleton() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
}

懒汉式单例模式

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
27
28
29
30
31
32
33
34
/**
* @author iisheng
* @date 2019/10/17 13:11:18
* @description 线程不安全的单例
*/
public class LazySingleton {

private static volatile LazySingleton singleton = null;

// 限制产生多个对象
private LazySingleton() {

}

// // 通过该方法获取实例对象
// public static synchronized LazySingleton getSingleton() {
// if (singleton == null) {
// singleton = new LazySingleton();
// }
// return singleton;
// }

// 通过该方法获取实例对象
public static LazySingleton getSingleton() {
if (singleton == null) {
synchronized (LazySingleton.class) {
if (singleton == null) {
singleton = new LazySingleton();
}
}
}
return singleton;
}
}

饿汉式单例模式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* @author iisheng
* @date 2019/10/17 13:11:18
* @description 线程不安全的单例
*/
public class HungrySingleton {
private static final HungrySingleton singleton = new HungrySingleton();

// 限制产生多个对象
private HungrySingleton() {

}

// 通过该方法获取实例对象
public static HungrySingleton getSingleton() {
return singleton;
}
}
iisheng wechat
微信扫码关注 Coder阿胜