设计模式-单例模式学习笔记
DCL、Holder(静态内部类)和饿汉式单例都可以通过反射或者序列化破坏。 直接用枚举单例就完事了。 场景:多线程情况下操作相同对象应该是同一个对象。例如文件。 在实例化过程中,所有的对象只实例化一次。 需要实现一个实例化的过程并且向用户提供一个返回实例对象的方法。 线程安全性。 性能。 懒加载。 饿汉式 在加载时就产生实例化对象存放在堆中,后续使用时只会取到同一个实例化对象,故判断其线程安全。(Ref:JVM ClassLoader)。 不存在延迟加载的情况,长时间不使用仍然会保存在堆内存中,若单例数据较大的时候会产生内存浪费,甚至可能会产生内存溢出影响性能。 因此比较适合少量数据的单例模式。 public class HungrySingleton { private byte[] data=new byte[1024]; private static HungrySingleton instatance=new HungrySingleton(); private HungrySingleton(){ } public static HungrySingleton getInstance(){ return instatance; } } 懒汉式 为了克服单例对象数据较大且还未被使用时造成的内存浪费,将饿汉式做出一定改变,在首次使用时才进行加载。 懒汉式并非线程安全的