静态工厂方法是一种创建对象的模式,通过静态方法来实例化对象,而不是直接使用构造函数。这与设计模式中的"工厂方法模式"相关,但更简单。
是否将静态工厂方法声明为final取决于你的设计意图和需求:
public final class MyClass {
private MyClass() {} // 私有构造
// final静态工厂方法
public static final MyClass createInstance() {
return new MyClass();
}
}
public class Parent {
// 非final工厂方法,允许子类覆盖
public static Parent create() {
return new Parent();
}
}
public class Child extends Parent {
// 覆盖父类的工厂方法
public static Parent create() {
return new Child();
}
}
public class CachedObject {
private static final CachedObject INSTANCE = new CachedObject();
private CachedObject() {}
// final确保所有调用都使用相同的缓存实例
public static final CachedObject getInstance() {
return INSTANCE;
}
}
public abstract class Shape {
// 非final,允许不同形状有不同的创建逻辑
public static Shape createShape(String type) {
switch(type) {
case "circle": return new Circle();
case "square": return new Square();
default: throw new IllegalArgumentException();
}
}
}
在大多数情况下,将静态工厂方法声明为final是更安全、更明确的选择,特别是当工厂方法的实现逻辑不应该被改变时。只有在明确需要允许子类自定义创建逻辑时,才考虑不声明为final。