美文网首页
何时该使用Singleton

何时该使用Singleton

作者: yangweigbh | 来源:发表于2017-11-16 23:03 被阅读8次

Singleton是平常coding过程经常使用的设计模式,最近在一次面试中被问到何时该使用singleton,居然从来没仔细思考过这个问题,查阅了各种资料后,来做个总结

Singleton一般是被喷的,各种缺点:

  1. Hides dependencies: 使用Singleton不用通过dependency injection注入,在API中看不出对Singleton的依赖。

  2. Hard to test: 使用singleton的类没法测试,因为singleton的类没法mock

  3. Hard to subclass: 构造函数私有,无法继承

  4. Singleton是per classloader的,而不是per vm的,其实会产生多个实例

  5. Global state,难以维护

所以singleton应该尽量避免,而应该在系统最顶层构造一个单一的对象(可以是工厂也可以直接new),然后通过依赖注入,注入到每个使用的类中。

有一种例外情况使用singleton也无妨的,就是logging,因为logging的状态流动是从application流动到logging singleton里的,logging的global状态变化不会影响到外部的application。

Singleton还有的一个好处,可能就是延迟初始化了

相关文章

网友评论

      本文标题:何时该使用Singleton

      本文链接:https://www.haomeiwen.com/subject/xozrvxtx.html