20220301 单例模式
明昧 Lv7

单例模式用来解决什么问题

  • 保证一个类只有一个实例,并且提供了访问该实例的全局访问点

  • 相关解决问题的场景:

    1.在多个线程之间,比如只初始化一次资源

    2.在整个程序运行的周期与空间使得某个/某种资源被共享

    3.在规模较大的系统中,为了性能的考虑,需要节省对象的创建时间

实现考虑充分单例的需要满足

  • 创建唯一,过程对外不可见
  • 用时创建
  • 多线程下访问安全性
  • 访问接口唯一

实际的应用中,根据考虑要点的不同,不一定每次我们创建单例的时候,上述需求全部满足,全部满足开销也不见很小呢 😦

比如如果我们有两个单例模式,分别在两个文件中需要被初始化,并且两个单例模式的其中一个的初始化需要用到另一个单例,但是此时另一个单例的初始化还没有进行(这个情景真的存在的,有时候不在一个文件里我们确实没有办法保证初始化的顺序按照我们预期实现),我们很难保证编译器的执行顺序如同我们预期设想,所以这时候就不要采取饿汉模式(具体分析看后文

实现单例的他人思路

  • 加锁

  • static

  • 静态指针代替指针或者对象或者引用访问

  • 这几个混合

  • 懒汉实现(new,new之前检查和加锁、call_once\智能指针,静态局部)

  • 饿汉实现(一开始就实现静态全局或者局部静态全局,一开始就初始化:实现)

  • JAVA可以用枚举

具体问题一:两个单例,A用B的单例对象

具体问题二:Java枚举类型

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View