algorithm - 构造函数参数还是方法参数?

标签 algorithm design-patterns

<分区>

从设计的角度来看,什么时候删除方法参数并使用构造函数参数更好,因为方法可以使用已初始化为构造函数参数的类变量?

最佳答案

  • 如果类的对象在没有这些参数的情况下不能被视为完全初始化,则使用构造函数参数。例如:如果您正在创建 Employee 类并且您希望每个 Employee 实例都必须有名称,那么您应该在构造函数中使用名称作为参数。另一个例子,如果不指定要打开的文件的名称,就不能创建 File 类。

  • 仅在方法上下文中相关的参数应作为方法参数传递。例如,可以是当您将新项目添加到 List 类时。这可能会在内部更新对象的状态,但这就是此类的工作方式 - 它具有维护列表的内部数据结构,并且方法旨在操纵这些状态。

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

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

关于algorithm - 构造函数参数还是方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909210/

相关文章:

java - 用一串字母创建一棵平衡二叉树

python - 如何在Python中应用闭-开和控制反转原理?

design-patterns - oop中的多对多关系

design-patterns - 观察者模式是否应该包括一些无限循环检测?

糟糕的 if-else 或 switch 结构的 Java 替代方案

design-patterns - Scala 中策略模式的更好替代方案?

sql - 对数据库的密集查询使加载时间变得疯狂

算法帮助 : Fit a text blurb to its textbox by length

ruby-on-rails - 如何对哈希的分层数组进行排序

algorithm - Levenshtein 分成太多的子串