0

我意识到这个问题已经被问过好几次了,但我想在我在这里研究的一个特定示例中对其进行框架化。我正在研究一个在网格上运行的有限元代码。网格在逻辑上是一个对象,在它被“构建”或构建之前,我们不能对它做任何事情。这似乎是有道理的,然后将网格参数传递给构造函数并让构造函数构建网格。在网上搜索,我看到一个普遍的观点,即这不一定是一个好主意,构造函数应该尽可能少做。

网格生成可能是一个漫长而复杂的过程。另一方面,网格在生成之前完全不可用,我会考虑它的构造。我可以将每个步骤映射为我希望客户端调用的方法,但是这些方法将始终相同,并且它们将始终使用相同的参数。即使内部结构发生变化,公共接口也极不可能发生变化。此外,客户端不应该关心网格生成细节可能是有道理的。考虑到这一点,在构造函数中完全生成网格并在之后处于准备使用状态似乎是有意义的。我还可以创建一个对客户端不透明的简单生成方法,但是为什么构造函数不能做同样的事情呢?它必须是可用的。

将这些东西放在构造函数中时,我应该注意这里是否存在隐患?

4

2 回答 2

1

您没有提到的另一种可能性是懒惰地执行昂贵的操作,即第一次需要它的结果。

这使得对象构造变得便宜,不会给客户端带来额外的调用方法的负担,并且如果从不使用对象,则完全避免了昂贵的操作。

主要缺点是复杂性略有增加,尤其是在多线程上下文中。

于 2012-05-16T14:28:09.227 回答
1

构造函数需要构建之后将在您的方法中使用的“基本”构建块或元素。如果您的大多数方法都适用于网格,我将使用构造函数来生成网格。另一方面,如果大多数方法可以在比网格更小的元素上工作,那么也许你不应该将它包装在构造函数下。

于 2012-05-16T14:36:43.737 回答