2010-02-02 31 views
14

我不记得确切是一个常见的模式,但我有一个类(工厂方法模式),其中有方法来创建取决于枚举参数其他类(Abstract Factory模式):创建工厂的班级的名字是什么? (FooFactoryFactory听起来很傻IMO)

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

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

那么,如何重命名FooFactoryFactory?

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

+0

Foo Fighter .. – 2010-02-02 18:16:32

+1

'FooFactoryFactory'可能听起来很愚蠢,但我认为它清楚地传达了它是什么。希望你不会需要'FooFactoryFactoryFactory' :-) – 2014-06-25 11:42:17

回答

15
  • FooFactoryCreator
  • FooFactoryProvider

但你可能要重新命名你的工厂,比方说,建设者。看看javax.xml.parsers.DocumentBuilderFactory,其中procudes DocumentBuilder情况下,这反过来又产生Document小号

展望DocumentBuilderFactory例如,另一个选择出现了:

  • 有一个抽象FooFactory
  • 做出static newInstance()方法有(带参数)
  • newInstance()返回适当的执行FooFactory
+4

+1:很好的建议和选择。我是我自己立刻想着'MotherFooFactory' :) – BalusC 2010-02-02 18:21:50

+3

'母亲'约定是我使用下一次我需要这个:) – Bozho 2010-02-02 18:25:32

+2

合意的解决方案,只有评论是一个谨慎的词,只有在极少数情况下是一个字“工厂工厂”是一个真正必要的设计。这听起来令人费解,如果没有更优雅的模式适用于任何问题,我会感到惊讶。在案例中,DocumentBuilderFactory经常被滥用(特别是从线程安全的角度来看),我会立即质疑我可以与之相比的任何代码。 – 2010-02-03 18:15:38