跟着《重构》学设计模式——单例模式

1
2
3
4
5
public enum Singleton {  
INSTANCE;
public void whateverMethod() {
}
}

Singleton模式讲解

模式类型

对象创建型模式

意图

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

动机

保证一个类只有一个实例,若打印假脱机等。更好的方法是让类自身负责保存它的唯一实例。

UML

2024-03-20-12-43-01-20240320124300

实现

实现方式1:(懒加载,双重校验锁)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}
}

实现方式2:(最佳方式,可避免被反序列化创建)

1
2
3
4
5
public enum Singleton {  
INSTANCE;
public void whateverMethod() {
}
}

实现方式3:(懒加载)

1
2
3
4
5
6
7
8
9
public class Singleton {  
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}