微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Joshua Bloch 有说过不要在底层资源中使用单例吗?

如何解决Joshua Bloch 有说过不要在底层资源中使用单例吗?

我一直在阅读 Joshua Bloch 的Effective Java 一书。在第 5 条中,他似乎说不要使用单例或静态实用程序类来实现依赖一个或多个底层资源的类,也不要让该类直接创建这些资源,使用依赖注入。

我想澄清一下他在这里试图给出的确切建议。当我有一些影响该类的变量时,我是否应该根本不创建单例或静态实用程序类(并且只使用一个类)?或者我可以使用它,但只需要使用依赖注入?以下哪种策略最符合 Bloch 的建议?

解决方法

Joshua 谈论的是作为数据库、文件系统或各种网络资源等资源网关的类。它们很难被替代实现替代。如果您只使用常规类,可能实现一个抽象接口,您可以将它们注入任何需要的地方,并通过注入其他东西来代替它们。这种替代实现的主要示例是单元测试中使用的 Mocks/Stubs/Fakes,您不想访问实际的底层资源。其他示例:

  • 通过读取 YAML 文件替换读取 JSON 文件
  • 用从/向另一个数据库系统读取/写入的内容替换从/向一个数据库系统的读取/写入
  • 通过从 here.com 阅读来替换通过谷歌地图的路线

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。