Fabrik implementiert, mit der statischen Methode
Ich habe gesehen, dass die Umsetzung der Fabrik mit statischen Methoden. So etwas wie dieses:
public class MyFactory {
public static Product1 createProduct1() {}
public static Product2 createProduct2() {}
}
p1 = MyFactory.createProduct1();
p2 = MyFactory.createProduct2();
Ich bin mir nicht sicher, ob ich das so nennen kann Abstrakte Fabrik, aber das ist nicht die Frage. Was ich verstehe, über das Abstrakte Werk ist, dass es gibt uns die Flexibilität zu ändern, die Produkt-Familien leicht.
Factory factory = new MyFactory(); //might be a global or Singleton
p1 = factory.createProduct1();
p2 = factory.createProduct2();
Und wenn ich will Wechsel von MyFactory
zu YourFactory
dann nur eine Zeile ändern müssen. Ich kann es auch ändern, dass im Lauf der Zeit. Aber ist es möglich, wenn Sie umgesetzt werden, als statische Methode? Ich brauche zu ändern, alle Aufrufe von statischen factory. Auch die Verwendung von if-else-Prüfung in allen Orten, wenn wir wollen, zu entscheiden, in der Laufzeit.
p1 = YourFactory.createProduct1();
p2 = YourFactory.createProduct2();
Also, was ist der nutzen der Implementierung Fabrik mit statischen Methoden? Sind nicht wir verlieren die wichtigste Flexibilität? Was habe ich hier verpasst?
Bitte beachten Sie, dass keine spezielle Sprache wird vorausgesetzt. Jede Hilfe ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit statischen Methoden wie, dass, erhalten Sie einige die Wiederverwendung von code, sondern das ist über das Ausmaß des Nutzens. Es im wesentlichen reduziert die oo-pattern prozedurale Paradigma. Die große Sache, die Sie verpassen ist, ändern Sie Ihre Implementierung zur Laufzeit basierend auf dem Kontext.
Ein singleton ist nur geringfügig besser. Es ermöglicht Ihnen zu schreiben, Ihre Logik, die normalerweise mit den Variablen (Zustand) und dann einfach mit ein paar tweaks verwandeln es in ein singleton. Lassen Sie uns sagen, dass Ihre Taten einige Instanz-pooling in Ihrer Fabrik, singleton könnte eine gute Passform gibt. Sie vermissen noch auf Rahmen, obwohl.
Die flexible Struktur ist die Verwendung von dependency inversion, d.h. Ihrer Klasse hängt von einer Fabrik, Abstraktion und nicht wissen, oder egal, wenn es ein singleton ist oder nicht. Dies ermöglicht Ihnen zu prüfen, den Kontext, wenn die Versorgung der konkreten Fabrik verwenden.
War ich etwa sagen, ich sehe keinen Vorteil bei der Verwendung dieser Fabrik über das instanziieren Ihrer Objekte durch
new Product1()
usw.Aber, dass ist nicht ganz korrekt. Sie können wählen, eine Implementierung für eine Basisklasse, wenn Sie eine solche Fabrik, und das ist vielleicht der Grund, warum Sie es umgesetzt. Zum Beispiel, die
createProduct1()
Methode umgesetzt werden können, wiereturn new JumboProduct1();
woJumboProduct1
ist abgeleitet vonProduct1
, und der rest des Codes wird isoliert von solchen politischen Entscheidung. Nicht sehr flexibel, aber es wäre den job zu erledigen, nehme ich an.Ich die Uhr Antworten auf diese Frage zu sehen, ob es gibt andere Anwendungen für so ein setup, da ich nicht an nichts anderes denken im moment.
Es gibt keine Vorteile an die Abstrakte Fabrik hier. Nur wenn diese Methode ist eine
Builder
- Sie können die Kapseln einige bedingte Logik increateProductX()
Methoden.taskinoor,
Die Nutzung von statischen Methoden ist nicht empfohlen in der reinen OO-Programmierung aus mehreren Gründen.
Having said that, es gibt einige Vorteile, die mit statischen Methoden
Wenn Sie erstellen eine Bibliothek mit Funktionen, die in der Regel bleiben dieselben zur Laufzeit, statische Methoden sind eine gute Wahl.
Bitte haben Sie einen Blick auf die Implementierung der abstrakten Fabrik hier. Ich glaube nicht, dass es erforderlich ist, zu verwenden, "static" - Methoden zu erreichen, die abstrakte Fabrik.
http://www.dofactory.com/Patterns/PatternAbstract.aspx#_self1
Kürze halber mit einer statischen Methode, um Objekte zu instanziieren ist die sauberste, wenn Sie eine große Anzahl von Objekten zu konfigurieren. Vergleichen Sie zum Beispiel:
und:
Änderung von drei Zeilen in die Konfiguration sauberer, und die Linie mehr tragbar - nur erfordert eine variable, die Namen zu ändern. Profitieren Sie auch von auto-complete mit jedem Punkt, wenn Sie mit der rechten IDE, macht es viel einfacher zu schreiben, neue Linien und neue Eigenschaften hinzufügen.