避免传递服务/管理器对象

时间:2018-02-05 21:00:41

标签: java design-patterns

我有一个服务类,它依赖于多个其他服务类。

class Service1 {
}
class Service2 {
}
class Service3 {
}
class Service4 {
}

class Service5 {
   public Service5(Service1 s1, Service2 s2, Service3 s3, Service4 s4);
}

是否存在设计模式/最佳实践,我可以避免将多个服务传递给Service5构造函数。 当其他服务(service1,service2等)需要为某些执行调用service5时,它会变得复杂,因为它可能导致循环依赖。

我能想到的一个解决方案是拥有一个ServiceCollection静态类,其中包含所有服务的getter。

1 个答案:

答案 0 :(得分:1)

  

我能想到的一个解决方案是拥有一个ServiceCollection静态类   所有服务都有吸气剂。

应该真正避免检索Service对象的静态方法。它使得它们的依赖关系没有明确定义,并且可以根据用户类进行切换。

作为替代方案,您可以定义一个工厂类,它提供检索Service实例的实例方法。

就个人而言,我会使用相当依赖注入来解决这个问题。这样,您可以获得更少的样板代码,并且您不会在整个代码中分散工厂方法调用。

  

当其他服务(service1,service2等)变得复杂时,   需要为某些执行调用service5,因为它可能导致循环   依赖性。

如果您的类实例化中存在循环依赖关系,则应强烈重新考虑实际设计。