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