Wann verwenden Sie das abstrakte-Fabrik-Muster?

Ich versuche kurz und bündig zu beschreiben wenn zu verwenden, eine Fabrik, für mich und mein team. Ich lief über die folgenden Fragen, die etwas geholfen:

Basierend auf diesen links, und eine Reihe von anderen Quellen (aufgeführt am Ende), habe ich die folgenden:

, Wenn die abstrakte-Fabrik-Muster:

  • wenn Sie über eine Schnittstelle, var oder die 'new' - operator
    • z.B. User User = new ConcreteUserImpl();
  • und den code, den Sie schreiben sollten testbar sein /extensible irgendwann

Erklärung:

  • Schnittstellen von Natur implizieren mehrere Implementierungen (gut für unit-Tests)
  • Schnittstelle vars bedeuten, OCP - und LSP-kompatiblen code (support sub-classing)
  • dem 'new' - operator bricht OCP/DI, da stark gekoppelten Klassen sind schwierig zu testen oder zu ändern

"Erstelle ich eine Fabrik für jeden Objekt-Typ? Das scheint übertrieben."

  • Nein, Sie können eine (oder ein paar) Fabriken, die produzieren eine Menge von (meist Verwandte) Objekt-Typen
  • z.B. Studio.createUser(); Studio.createCatalog(); usw.

NICHT zu verwenden wenn eine Fabrik:

  • das neue Objekt ist sehr einfach und kaum zu sub-klassifiziert
    • z.B. Liste list = new ArrayList();
  • das neue Objekt ist nicht interessant zu testen
    • hat keine Abhängigkeiten
    • führt keine relevanten oder lange andauernde Arbeit
    • z.B. Logger log = new SimpleLogger();

Referenzen:


Meine Frage ist: ist meine Zusammenfassung genau, und macht es Sinn? Gibt es irgendetwas, was ich übersehen habe?

Vielen Dank im Voraus.

  • Ich hasse die Wiederbelebung Alter threads, aber... ich bin nicht einverstanden, dass der Logger sollte neu sein würde, wie oben beschrieben. Ich habe oft mit verschiedenen Datenloggern in unterschiedlichen Testumgebungen. Ich konfigurieren Sie die Umgebung zur Verwendung einer bestimmten logger und injizieren es in Objekte, die log. (Ich könnte sogar Spritzen arrays Logger.)
InformationsquelleAutor Luke | 2010-12-02
Schreibe einen Kommentar