1.什么是单例
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例。即一个类只有一个对象实例
2.为什么需要单例
为了控制对象的唯一性。
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要
3.创建单例模式对象
饿汉模式(因为类属性就是一个对象,而且跟随着类加载同事创建。所以叫饿汉模式)
1.首先我们需要私有化构造函数
2.创建类的唯一实例,使用private static 修饰(为什么需要加private修改呢,因为如果没有private ,外部就能通过类.属性名的方式访问,也就创建新的对象了)
3.提供一个用于获取实例的方法,使用public static 修饰
那么也许会问为什么都需要static修改方法。
因为如果把构造函数私有化,就没办法
创建对象,接着也没办法使用非静态方法获得实例对象。
懒汉模式
懒汉模式和饿汉模式的区别
饿汉模式的特点是加载类时比较快,但是运行时获取对象的速度比较快,线程安全
懒汉模式的特点时加载类时比较快,但运行时获时取对象的速度比较慢,线程不安全
线程问题看这个博客(https://blog.csdn.net/sinat_32867867/article/details/53781512)
时间:2018.06.05 补充,懒汉模式如何进行线程安全处理。
补充,上面的代码不是线程安全 因为read是引用类型,需要加volatile 才算线程绝对安全