2

这是一个一般的风格问题,哪个是最佳实践?哪个更可测试?假设你有课:

public class MyExecutor {
   public MyExecutor(Model model) {
       this.model = model
   }
   public void execute() {
     // Do something with model;
   }

   public String toString() {
     return model.toString();
   }
}

使用上面的代码,假设我将我感兴趣的对象传递给构造函数,然后在唯一的方法中使用该对象。将上面的代码与下面的代码进行比较。

public class MyExecutor implements TheExecutor {
   public MyExecutor() {
   }
   @Override
   public void execute(Model model) {
     // Do something with model;
   }   
}

这段代码的一个优点是,我可以定义一个接口方法,并且可以定义所需的参数。不是面向构造函数的方法。

使用这些方法,并且只有一个构造函数和一个方法,您更喜欢哪种方法,为什么?

4

1 回答 1

4

您必须考虑对象的状态(即对象是什么,一种具有修改状态的方法的状态)。如果对象的状态是由模型决定的,那么它应该在构造函数中。否则,它应该用作可能修改状态或使用状态来确定输出/返回值的参数。

这类似于界面问题。aTheExecutor只能与 a 一起运行Model吗?如果它需要 aModel那么它应该在参数列表中,或者如果对象状态依赖于Model并且执行只能使用 a 运行Model,那么TheExecutor应该是一个abstract class包含Model并且每个子类构造函数都应该调用super( model )的。

于 2013-10-24T18:20:53.400 回答