Let's learn what's singleton

Let's learn what's singleton

单例(Singleton)

数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”。

什么是单例?

一个类有且仅有一个实例, 并提供一个可以访问它的全局访问点.

单例有什么用?

解决一个全局使用类的频繁创建销毁.

怎么实现单例?

实现方案

  • 隐藏类的构造方法
  • 定义一个公有的静态方法, 通过它返回类的唯一实例

java实现

  1. 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. 枚举实现
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
public enum SingletonEnum {
    /**
     * 使用枚举实现的单例
     */
    INSTANCE;

    public void otherMethods() {
        System.out.println("Something");
    }
}
Licensed under CC BY-NC-SA 4.0
Last updated on Apr 30, 2020 16:17 UTC