单例模式的实现方式
单例模式注意事项和细节说明
- 单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能
- 当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new
- 单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、 session工厂等)
饿汉式
静态常量
静态代码块
懒汉式
线程不安全
同步方法
同步代码块(线程不安全)
双重检查机制
要点
- 多线程主存同步volitale
- 同步代码块中再次检查
静态内部类
要点
- 静态内部类不会随外部类加载而加载
- 获取静态内部类的静态常量时会导致静态内部类的装载,此过程是线程安全的
- 类的静态属性指挥在第一次加载类的时候初始化
枚举
优缺点说明
- 这借助DK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
- 这种方式是 Effective Java作者 Josh Bloch提倡的方式
- 结论:推荐使用
枚举相对之前方式的优势
前面七种方式的共性如下
- 构造方法私有化
- 实例化的变量引用私有化
- 获取实例的方法共有
防反射攻击
单例模式的应用举例
runtime
为静态常量-饿汉式
评论前必须登录!
注册