The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
让构造函数在封装参数之前对其进行预处理似乎是不好的做法。然而,很多时候确实需要这样做:对所提供的对象进行某些操作,然后才将其分配给构造对象的属性。为此,我建议使用预构造函数,可以是方法或独立的对象。
假设这是你的代码:
唯一的构造函数接受一个标题列表,该列表被封装为this.titles
以备将来使用。它还通过JDK装饰器unmodifiableList
来防止任何意外修改。到目前为止,一切都很好。现在,我们想让我们的类变得更智能一点,让它不仅接受List
,还能接受字符串数组:
这段代码有什么问题?那些阅读了我之前的有关OOP的博客文章的人肯定知道答案。首先,有两个主要构造函数,这是另一个不好的实践。其次,第二个构造函数中有代码,这也是一个不好的想法。
下面是我通常是如何重构这段代码以解决上述两个问题的:
我将这个新的静态方法 toList()
称为 prestructor:它只能在对象构造的瞬间使用,并且只能从次要构造函数中使用。
设计它的更好方式是创建一个名为 ToList
的新类,它可以以更加声明性和延迟的方式完成完全相同的工作:
ListOf
来自 Cactoos 是这样一个预构造的完美例子。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-17 at 15:52