我一直在读Joshua Bloch的《高效Java》一书。在第5项中,他似乎说不要使用singleton或静态实用程序类来实现依赖于一个或多个底层资源的类,也不要让该类直接创建这些资源,使用依赖注入。
我想澄清一下他在这里试图给出什么建议。当我有一些影响类的变量时,我应该不创建一个singleton或静态实用程序类(并且只使用一个类(吗?或者我可以使用它,但只需要使用依赖项注入?以下哪种策略最符合布洛赫的建议?
Joshua谈论的是作为数据库、文件系统或各种网络资源的网关的类。它们很难被替代实现所取代。如果您只使用常规类,可能会实现抽象接口,那么您可以在需要它们的地方注入它们,并通过注入其他东西来替换它们。这种替代实现的主要例子是在单元测试中使用的Mocks/Stubs/Fakes,您不想访问实际的底层资源。其他示例:
- 将从JSON文件读取替换为从YAML文件读取
- 用从另一个数据库系统读/写的东西来代替从一个数据库体系读/写
- 通过阅读here.com替换通过谷歌地图的路由
- 等等