创建工厂的班级有什么好名字?(FooFactoryFactory听起来很傻)

Rom*_*man 18 java oop design-patterns naming-conventions

我不记得究竟它是一个常见的模式,但我有一个类(工厂方法模式),它具有根据枚举参数创建其他类(抽象工厂模式)的方法:

public class FooFactoryFactory {
   public FooFactory createFactory (FooFactoryType type) {
      switch (type) {
         case AFoo:
            return new AFooFactory ();
            break;
         case BFoo:
            return new BFooFactory ();
            break;
         default:
            throw new RuntimeException ("...");
      }  
   }
}

public interface FooFactory {
   Foo createFoo ();
   FooItem createFooItem ();
}
Run Code Online (Sandbox Code Playgroud)

FooFactory有几个实现以及Foo接口和FooItem接口(常见的抽象工厂模式).

那么,如何重命名FooFactoryFactory呢?

也许,FooFactoryCreator?(在写这个问题时想一想这个名字).恕我直言,这很好,您怎么看?

Boz*_*zho 17

  • FooFactoryCreator
  • FooFactoryProvider

但是,您可能希望将工厂重命名为构建器.看看javax.xml.parsers.DocumentBuilderFactory,这procudes DocumentBuilder情况下,这又产生Document小号

在这个DocumentBuilderFactory例子中,出现了另一种选择:

  • 有一个摘要 FooFactory
  • static newInstance()那里制作一个方法(带参数)
  • 让我们newInstance()返回相应的实现FooFactory

  • +1:很好的建议和替代方案.我当时正在考虑`MotherFooFactory` :) (4认同)
  • `Mother`约定是我下次需要时使用的那个:) (3认同)
  • 令人愉快的解决方案,只有评论是一个谨慎的说法,只有在极少数情况下,"工厂工厂"才是真正必要的设计.这听起来很复杂,如果没有更优雅的模式适用于任何问题,我会感到惊讶.例如,DocumentBuilderFactory经常被滥用(特别是从线程安全角度来看),我会立即质疑我可以与之比较的任何代码. (2认同)