面向对象编程,是否更容易将参数传递给方法而不是构造函数?

时间:2013-10-24 18:14:07

标签: java oop interface

这是一般风格问题,这是最佳做法?哪个更可测试?假设你上课了:

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:4)

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

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