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

Java 避免传递服务/管理器对象,java,design-patterns,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、service

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

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

我能想到的一个解决方案是使用ServiceCollection静态类 其上有所有服务的getter

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

所以,作为替代方案,您可以定义一个工厂类,该类提供实例方法来检索服务实例

就个人而言,我宁愿使用依赖注入来解决这个问题。这样,您将拥有更少的锅炉板代码,并且不会在整个代码中出现分散的工厂方法调用

当其他服务1、服务2等, 需要调用service5进行一些执行,因为它可能导致循环 依赖性


如果类实例化中存在循环依赖项,则应重新考虑实际设计。

服务应相互独立。循环依赖可能是您的服务太大、做得太多的一个迹象。您的应用程序中还可能缺少将服务调用与其逻辑分离的调度层。