这种建筑规范是否有设计模式?

时间:2012-06-16 17:21:21

标签: java design-patterns

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);

3 个答案:

答案 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 类不同。