这是一般风格问题,这是最佳做法?哪个更可测试?假设你上课了:
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;
}
}
这段代码的一个优点是,我可以定义一个接口方法,我可以定义所需的参数。不是面向构造函数的方法。
使用这些方法并且只有一个构造函数和一个方法,您更喜欢哪种方法?为什么?
答案 0 :(得分:4)
您必须考虑对象的状态(即对象是什么,具有修改状态的方式的状态)。如果对象的状态由模型确定,则它应该在构造函数中。否则,它应该用作可能修改状态的参数或使用状态来确定输出/返回值。
这类似于界面问题。 TheExecutor
只能使用Model
运行吗?如果它需要Model
,那么它应该在参数列表中,或者如果对象状态取决于Model
并且执行只能使用Model
运行,那么TheExecutor
应该是abstract class
,其中包含Model
,每个子类构造函数应该调用super( model )
。