public class A {
private A(int param1, String param2) {}
public static A createFromCursor(Cursor c) {
// calculate param1 and param2 from cursor
return new A(param1, param2);
}
}
这种建筑规范是否有设计模式?如果是这样,这种模式的目的是什么?为什么不直接使用:
// calculate param1 and param2 from cursor
new A(param1, param2);
答案 0 :(得分:3)
所以,总结一下。
该模式称为静态工厂方法,例如:How to use "Static factory methods" instead of constructors?
最简单的形式如下:
class A {
public static A newA() {
return new A();
}
private A(){}
}
您的示例稍微复杂一些,因为它包含用于调用构造函数的计算参数
public class A {
private A(int param1, String param2) {}
public static A createFromCursor(Cursor c) {
// calculate param1 and param2 from cursor
return new A(param1, param2);
}
}
使用这种方式创建新对象的目的可能是需要在直接调用new A(params)
之前每次重复计算。所以它只是避免重复自己,最简单的方法是创建一个方法。
此外,使用相同的方法,您可以提供更多选项来创建new A
。例如,您可以更改计算的工作方式:
public static A createFromCursorDifferently(Cursor c) {
// calculate param1 and param2 from cursor in different way
return new A(param1, param2);
}
然后你可以将相同的参数传递给这个方法,结果会有所不同(因为方法名称不同)。
当然,您可以使用与以前相同的构造函数从任何其他参数创建new A
:
public static A createFromObject(Object o) {
// calculate param1 and param2 from object
return new A(param1, param2);
}
因此,与仅使用构造函数的简单用法相比,静态工厂方法的可能性更大。
答案 1 :(得分:2)
如果您的代码已编译,它将代表一个简单的factory method(它返回一个静态的东西?当然是A)。有些人认为这是一种模式,但其他人并不这样,因为它非常简单。有一种称为Abstract Factory Pattern的模式使用了这个概念,但模式却复杂得多。
答案 2 :(得分:1)
如果更正,您发布的内容的目的应该是提供一种方法来返回extends A
的某个实例,而无需先验地知道运行时类型。
所以是的,它听起来类似于Factory method pattern,尽管它与你写的有些不同。 factory 类应与 product 类不同。