建模类时,首选的首选方法是什么:
使用其中任何一个会有什么考虑因素?
在某些情况下,我更喜欢有一个工厂方法,如果无法构造对象,则返回null.这使代码整洁.在执行替代操作之前,我可以简单地检查返回的值是否为null,与从构造函数中抛出异常相反.(我个人不喜欢例外)
比如说,我在类上有一个构造函数,它需要一个id值.构造函数使用此值从数据库填充类.如果不存在具有指定标识的记录,则构造函数将抛出RecordNotFoundException.在这种情况下,我将不得不在try..catch块中包含所有这些类的构造.
与此相反,我可以在这些类上有一个静态工厂方法,如果找不到记录,它将返回null.
在这种情况下,哪种方法更好,构造函数或工厂方法?
我一直在审查Java Regex库,因为这个Pattern类没有我多年来认为理所当然的公共构造函数这一事实感到惊讶.
我怀疑使用静态compile方法支持构造函数的一个原因可能是构造函数总是返回一个新对象,而静态方法可能会返回先前创建的(和缓存的)对象,前提是模式字符串是相同的.
但是,如下所示,情况并非如此.
public class PatternCompiler {
public static void main(String[] args) {
Pattern first = Pattern.compile(".");
Pattern second = Pattern.compile(".");
if (first == second) {
System.out.println("The same object has been reused!");
} else {
System.out.println("Why not just use constructor?");
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用静态方法而不是构造函数的任何其他强有力的理由?
编辑:我在这里找到了一个相关的问题.那里的答案都没有说服我.通过阅读所有答案,我感觉静态方法相对于公共构造函数在创建对象方面具有相当多的优势,而不是相反.真的吗?如果是这样,我将为我的每个类创建这样的静态方法,并安全地假设它更具可读性和灵活性.
java constructor static-methods design-patterns factory-pattern