对大致相同的任务使用不同名称的方法是有道理的,例如
open(String filename);
createThenOpen(String filename); // First create the file with default contents, then process the file.
这种命名方法对构造函数不起作用。想象一下,构造函数采用如上所示的文件名。我有各种选择来处理这两种情况:
MyClass(String filename, boolean createNew)
。不太好,因为像MyClass("hello.txt", true)
这样的电话很神秘。RandomAccessFile(File file, String mode)
mode
为"r"
,"rw"
等。这对我的目的来说非常笨重。enum
- 类似于Files
' s copy(Path source, Path target, CopyOption... options)
的标记。感觉很笨重。目前我似乎真的喜欢上面的数字(6),并且只是在无参数构造函数之后立即调用两个具有不同名称的方法。我是否忽略了任何选择,或者是否有一个"给定的"这些方案的方法是什么?
编辑:正如其他人所指出的那样,当然还有第7个,也许是最明显的选择:
答案 0 :(得分:2)
使用一长串参数protected
创建构造函数,引入许多public static
名为createFooWithBar()
的方法,其中包含调用构造函数的精确参数列表。
答案 1 :(得分:0)
将构造函数设为私有并添加公共工厂方法。 我认为这是一种非常常见的模式。
另一种模式是" builder"。使构造函数只能访问同一个包的类。在同一个包中添加一个构建器(如果您愿意,可以使用多个构建器),它将调用构造函数并调用构造对象所需的任何其他方法。