2010-02-02 35 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