天下脸皮共十分
我占八分

单例模式

单例模式的实现方式

单例模式注意事项和细节说明

  • 单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能
  • 当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new
  • 单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象时耗时过多或耗费资源过多(即:重量级对象),但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象(比如数据源、 session工厂等)

饿汉式

静态常量
静态代码块

懒汉式

线程不安全
同步方法
同步代码块(线程不安全)

双重检查机制

要点

  • 多线程主存同步volitale
  • 同步代码块中再次检查

静态内部类

要点

  • 静态内部类不会随外部类加载而加载
  • 获取静态内部类的静态常量时会导致静态内部类的装载,此过程是线程安全的
  • 类的静态属性指挥在第一次加载类的时候初始化

枚举

优缺点说明

  • 这借助DK1.5中添加的枚举来实现单例模式。不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象
  • 这种方式是 Effective Java作者 Josh Bloch提倡的方式
  • 结论:推荐使用

枚举相对之前方式的优势

前面七种方式的共性如下

  • 构造方法私有化
  • 实例化的变量引用私有化
  • 获取实例的方法共有

防反射攻击

单例模式的应用举例

runtime

为静态常量-饿汉式

赞(3) 打赏
未经允许不得转载:Stephen Young » 单例模式
分享到: 更多 (0)

相关推荐

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏