Java 这不是通常所说的获得者。我知道这一点。但是我找不到更好的名字来称呼他们。。。并改用依赖注入new UserManager()每次您使用该类只是为了避免使用静态方法,这是所有方法中最糟糕的方法。对于状态保存,我很难想象我在哪里需要它,我希望您能详细说明一下。

Java 这不是通常所说的获得者。我知道这一点。但是我找不到更好的名字来称呼他们。。。并改用依赖注入new UserManager()每次您使用该类只是为了避免使用静态方法,这是所有方法中最糟糕的方法。对于状态保存,我很难想象我在哪里需要它,我希望您能详细说明一下。,java,maintainability,Java,Maintainability,这不是通常所说的获得者。我知道这一点。但是我找不到更好的名字来称呼他们。。。并改用依赖注入new UserManager()每次您使用该类只是为了避免使用静态方法,这是所有方法中最糟糕的方法。对于状态保存,我很难想象我在哪里需要它,我希望您能详细说明一下。对于接口的编程,这可能是另一个问题,引用Joshua Bloch的话“设计和文档是为了继承,还是禁止继承”。在这些情况下,我既不期望也不计划继承,因此,如果没有(在这些情况下)相关的东西,那么就向接口编码。最后,虽然我不是测试天才,但我通过确保


这不是通常所说的获得者。我知道这一点。但是我找不到更好的名字来称呼他们。。。并改用依赖注入
new UserManager()
每次您使用该类只是为了避免使用
静态方法,这是所有方法中最糟糕的方法。对于状态保存,我很难想象我在哪里需要它,我希望您能详细说明一下。对于接口的编程,这可能是另一个问题,引用Joshua Bloch的话“设计和文档是为了继承,还是禁止继承”。在这些情况下,我既不期望也不计划继承,因此,如果没有(在这些情况下)相关的东西,那么就向接口编码。最后,虽然我不是测试天才,但我通过确保测试是按指定顺序调用的方法来验证测试的唯一时间是在模拟时。除此之外,并非如此。@Emmanuel对象工厂可能需要跟踪通过它创建的对象,以某种方式成为它在持久化对象之前创建的对象的临时所有者。您可能希望在应用程序退出时将未保存对象的状态保存在临时位置,以便在重新启动时恢复其状态,而无需询问最终用户是否希望放弃或保留退出时未保存的工作。@Emmanuel就编程到接口而言,它不需要为继承而编程。可以简单地在使用工厂的程序员和提供工厂实现的程序员之间添加一定程度的隔离。这在多个团队在项目不同部分工作时非常有用:您先设置了一个接口,然后团队分别开发代码,提供和使用接口。为了状态保存,我很难想象我需要什么,我希望您能详细说明一下。对于接口的编程,这可能是另一个问题,引用Joshua Bloch的话“设计和文档是为了继承,还是禁止继承”。在这些情况下,我既不期望也不计划继承,因此,如果没有(在这些情况下)相关的东西,那么就向接口编码。最后,虽然我不是测试天才,但我通过确保测试是按指定顺序调用的方法来验证测试的唯一时间是在模拟时。除此之外,并非如此。@Emmanuel对象工厂可能需要跟踪通过它创建的对象,以某种方式成为它在持久化对象之前创建的对象的临时所有者。您可能希望在应用程序退出时将未保存对象的状态保存在临时位置,以便在重新启动时恢复其状态,而无需询问最终用户是否希望放弃或保留退出时未保存的工作。@Emmanuel就编程到接口而言,它不需要为继承而编程。可以简单地在使用工厂的程序员和提供工厂实现的程序员之间添加一定程度的隔离。这在多个团队处理项目的不同部分时非常有用:您预先设置了一个接口,然后团队分别开发提供和使用接口的代码。
public class LoginService {
   public boolean authenticate(String username, String password) {
      User user = UserManager.getUser(username); // hard dependency on implementation
      // other stuff
   }
} 
public interface UserManager {
   User getUser(String id):
}

public class SQLUserManager implements UserManager {
   @Override
   public User getUser(String id) { // SQL stuff }
}

class LoginService {
   public LoginService(UserManager userManager) {
      this.userManager = userManager;
   }

   public boolean authenticate(String username, String password) {
      User user = userManager.getUser(username);
      // other stuff
   }
}