2010-02-02 9 views
14

Non mi ricordo esattamente si tratta di un modello comune ma ho una classe (modello Factory Method), che ha metodo per creare altre classi (Abstract Factory modello) a seconda del parametro enum:Qual è un buon nome per la classe che crea le fabbriche? (FooFactoryFactory Sembra sciocco 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 ha diverse implementazioni oltre all'interfaccia FooItem e all'interfaccia FooItem (modello di fabbrica astratto comune).

Quindi, come rinominare FooFactoryFactory?

Forse, FooFactoryCreator? (Pensa a questo nome durante la scrittura di questa domanda). IMHO è bello, come pensi?

+0

Foo Fighters .. –

+1

'FooFactoryFactory' può sembrare sciocco, ma penso che comunichi chiaramente di cosa si tratta. Speriamo che sia improbabile che tu abbia mai bisogno di un 'FooFactoryFactoryFactory' :-) –

risposta

15
  • FooFactoryCreator
  • FooFactoryProvider

Ma si potrebbe desiderare di rinominare le vostre fabbriche, per esempio, i costruttori. Date un'occhiata a javax.xml.parsers.DocumentBuilderFactory, che procudes DocumentBuilder casi, che a loro volta producono Document s

Guardando l'esempio DocumentBuilderFactory, un'altra opzione si pone:

  • hanno un abstract FooFactory
  • fanno un metodo static newInstance() lì (con parametri)
  • let newInstance() restituire l'implementazione appropriata di FooFactory
+4

+1: suggerimenti e alternative carini. Stavo pensando subito a 'MotherFooFactory' :) – BalusC

+3

la convenzione' Mother' è quella che sto usando la prossima volta che ho bisogno di questo :) – Bozho

+2

Soluzione accettabile, solo un commento è una parola di cautela che solo in rari casi è un "fabbrica di fabbriche" un design veramente necessario. Sembra complicato, e sarei sorpreso se non ci fosse un modello più elegante da applicare a qualunque sia il problema. Case-in-point, DocumentBuilderFactory viene spesso usato in modo improprio (soprattutto dal punto di vista della sicurezza dei thread), che metterei immediatamente in discussione qualsiasi mio codice che potrebbe essere paragonato ad esso. –

Problemi correlati