构造函数参数或方法参数?

时间:2013-07-28 14:27:41

标签: algorithm design-patterns

从设计的角度来看,何时删除方法参数更好,而是使用构造函数参数,其中方法可以使用已经初始化为构造函数参数的类变量?

1 个答案:

答案 0 :(得分:4)

  • 如果没有这些参数,则无法将Class的Object视为完全初始化时使用构造函数参数。例如:如果您正在创建Employee类,并且您希望Employee的每个实例都必须具有名称,那么您应该在构造函数中使用name作为参数。另一个例子是,如果不指定要打开的文件的名称,则无法创建File类。

  • 仅在方法上下文中相关的参数应作为方法参数传递。例如,可以在将新项添加到List类时。这可能会在内部更新Object的状态,但这就是这个类的工作原理 - 它有内部数据结构来维护列表,而方法则意味着操纵这些状态。

  • 有时,底层框架可能会使用setter方法初始化状态。这通常是使用Hibernate之类的ORM或在MVC框架(例如Spring MVC)中使用Web表单中的Model对象之类的POJO Beans时的情况。在这些情况下,类通常表示值对象,并且通常的做法是不在构造函数中传递参数,因为框架使用默认的no-arg构造器实例化对象

  • 使用依赖注入框架时,您会发现可以使用Constructor或使用setter方法注入依赖项。在这种情况下,您应该将Constructor参数用于强制依赖,并将setter用于可选依赖项 - 尽管没有必要这样做。您可以将其视为指南。