答案 0 :(得分:2)
第二个例子更糟糕。制作一个单身的东西是非常不灵活的,使用它的一切都与这个实现联系在一起,并且不能独立地运用它。
单身是硬连线的全局状态,应用程序中的任何内容都可以调用,因此对象不会声明其依赖关系,并且很难知道什么依赖于什么。有关详细说明,请参阅此文http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/。
发明依赖注入框架是为了让开发人员比通过静态引用或服务定位器更好地连接对象。由框架而不是代码强制执行单例操作可以更容易地替换模拟。
在第一个示例中,尝试解析主机名的构造函数调用和静态方法调用使测试更加困难。但是getClient是一个可以在测试中重写的实例方法。第二个例子更糟糕,因为问题更广泛,使用单例的所有东西都很难测试。