Ich versuche kurz zu beschreiben wenn eine Fabrik zu verwenden, für mich und mein Team. Ich lief über die folgenden verwandten Fragen, die etwas geholfen:Wann das abstrakte Fabrikmuster verwenden?
- When to use factory patterns?
- (nützlicher PDF-Link ist gebrochen)
- How do you create your Factories?
- (mehr 'wie' statt 'wenn')
- What is your threshold to use factory instead of a constructor to create an object?
- (einige allgemeine Antworten)
- Factory Pattern. When to use factory methods?
- (mehr über Factory-Methoden als Factory-Klassen)
- When to use Factory method pattern?
- (wieder mehr über Factory-Methoden)
Basierend auf diesen Links und eine Reihe von anderen Quellen (unten aufgeführt), ich habe mit dem kommen folgende:
Wenn die abstrakte verwenden Fabrik Muster:
- wenn Sie eine Schnittstelle var oder den 'neuen' Operator
- , z.B. Benutzer user = new ConcreteUserImpl();
- und der Code, den Sie an einem gewissen Punkt
Erklärung prüfbar/erweiterbar sein schreiben soll:
- Schnittstellen, die von ihrer Natur impliziert mehrere Implementierungen (gut für Unit-Tests)
- Schnittstelle vars implizieren OCP- und LSP-konformen Code (Unterstützung Sub-Classing)
- Verwendung des ‚neuen‘ Betreiber bricht OCP/DI, weil hoch gekoppelt Klassen sind hart
„zu testen oder ändern Muss ich eine Fabrik für jeden Objekttyp erstellen? Das scheint übertrieben."
- nicht, können Sie eine (oder wenige) haben Fabriken, die eine Menge (in der Regel im Zusammenhang) Objekttypen
- zB appFactory.createUser() zu erzeugen; appFactory.createCatalog(); usw.
Wenn keine Fabrik zu verwenden:
- das neue Objekt ist sehr einfach und es ist unwahrscheinlich Unter eingestuft 0 sein
- z.B. Listenliste = new ArrayList();
- das neue Objekt ist nicht interessant
- zu testen, hat keine Abhängigkeiten
- führt keine relevanten oder lang andauernde Arbeit
- z.B. Loggerprotokoll = neu SimpleLogger();
Referenzen:
- http://googletesting.blogspot.com/2008/08/where-have-all-singletons-gone.html
- http://misko.hevery.com/2008/07/08/how-to-think-about-the-new-operator/
- http://misko.hevery.com/2008/08/17/singletons-are-pathological-liars/
- http://en.wikipedia.org/wiki/Dependency_Injection
- http://en.wikipedia.org/wiki/Open_Closed_Principle
- http://en.wikipedia.org/wiki/Liskov_substitution_principle
Meine Frage ist: ist meine Zusammenfassung genau und macht es Sinn? Gibt es etwas, was ich übersehen habe?
Vielen Dank im Voraus.
Warum ist dieses Java verwandt? Sollte es nicht sprachunabhängig sein? –
@the_drow: behoben, danke. – Luke
Ich hasse das Wiederbeleben alter Threads, aber ... Ich stimme nicht zu, dass Logger wie oben new'd neu sein sollten. Ich betreibe oft verschiedene Logger in verschiedenen Testumgebungen. Ich konfiguriere die Umgebung für die Verwendung eines bestimmten Loggers und injiziere ihn in Objekte, die loggen. (Ich könnte sogar Arrays von Loggern injizieren.) – aridlehoover