单例(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() { if(singleton != null){ throw new RuntimeException() } }
public static Lazy4SafeDoubleCheck getSingleton() { if (singleton == null) { synchronized (Lazy4SafeDoubleCheck.class) { if (singleton == null) { singleton = new Lazy4SafeDoubleCheck(); } } } return singleton; }
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"); } }
|