何时该使用Singleton

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还有的一个好处,可能就是延迟初始化了

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容