【问题标题】:Static factory method OR Creation method静态工厂方法或创建方法
【发布时间】:2010-10-17 19:07:21
【问题描述】:

我想知道这种结构的正确定义:

class A {
 public static A create() {
    return new A();
 }

 private A() {
 }
}

Effective Java(第1 项)和wikipedia article 中,我发现这称为静态工厂方法(某种工厂方法)。

但在阅读Refactoring to Patterns(第6章)时,我遇到了同样的构造,称为创建方法。另外,请注意,它不应该与 Factory Method 模式混淆。

真相在哪里?

【问题讨论】:

    标签: design-patterns terminology definition


    【解决方案1】:

    阅读一下工厂方法的 discussion

    FactoryMethodPatternFactoryMethodCreationMethod 不同。

    【讨论】:

      【解决方案2】:

      一种方法是调用无参数方法创建方法和参数化(例如通过枚举)-工厂方法。因为工厂更强大,可以创建不同类型的对象。

      如果你使用无参数方法,你必须在别处决定调用哪个类的方法。使用参数化方法,您可以将此逻辑传递给方法本身。所以后者(factory)也自己决定创建哪个类对象。

      【讨论】:

      • 对不起,从您的帖子中没有得到创建方法和工厂方法之间的实际区别。你能再解释一下吗?
      • 要调用创建方法,您需要决定调用哪个类的方法 - B::Create() 或 C::Create()。使用工厂方法,您只需对 F::Create(parameter) 进行分类,其中参数是一些枚举值,例如,fcatory 决定自己创建哪个类对象。
      【解决方案3】:

      创建方法是创建类实例的静态或非静态方法。 工厂方法是在类层次结构中定义和实现的方法,其创建具有多态性。

      【讨论】:

        【解决方案4】:

        嗯,不同作者的术语经常不同,所以我不会太担心这一点。

        不过,我认为“重构为模式”会警告不要将其称为“工厂方法”,因为存在 factory method pattern。由于工厂方法模式不仅仅是一种工厂方法,因此他们提出了不同的名称以避免混淆。

        我猜你也可以称它为“简单的静态工厂”,但这有点罗嗦(而且不标准)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多