2009-10-15 13 views
14

Es ist üblich, dass Factory-Klassen statisch sind und Factory-Methoden auch statisch sind.Factory-Erstellungsmethoden immer statisch?

Hat die GOF im Design Patterns-Buch jemals festgelegt, dass Fabriken und ihre Methoden statisch sein müssen, um die strenge Definition des Musters zu erfüllen?

Hat Fabriken +/Methoden statische nur eine Konsequenz des Musters? Zustandsdaten werden normalerweise nicht von der Factory-Klasse verwaltet, daher sind sie normalerweise statisch.

Antwort

11

Ich glaube nicht, dass es so etwas wie eine "strenge Definition" eines Musters gibt. Von Natur aus gibt es Muster, die das Wesen eines Problems erfassen, das immer wieder in Software auftaucht, und skizzieren, wie eine Lösung aussehen könnte.

Spezifisch mit dem Fabrikmuster, nein, es gibt keine Anforderung, dass die Fabrikmethoden statisch sind. Die Essenz des Musters besteht darin, dass Sie ein Objekt haben, das für das Erstellen von Instanzen einer anderen Klasse verantwortlich ist. Wie Sie dies tun, liegt wirklich bei Ihnen, obwohl eine übliche Methode, wie im Muster beschrieben, darin besteht, eine statische Methode für eine Klasse zu verwenden. Wir haben jedoch einen Mechanismus in einem unserer Systeme, der eigentlich zweistufig ist. Sie verwenden eine statische Methode für eine Klasse, um das Factory-Objekt zu erstellen, das so konfiguriert werden kann, dass es aus einer Reihe von Implementierungen ausgewählt werden kann, und dann das Factory-Objekt zum Ausstanzen von Instanzen des Objekts, die Sie für die eigentliche Arbeit benötigen.

Beachten Sie auch die Implementierung des Factory-Musters in einer Sprache, die keine statischen Methoden hat. In Scala würden Sie beispielsweise ein Objekt anstelle einer Klasse verwenden. Obwohl das Verhalten dieser Methode der Verwendung statischer Methoden in einer Klasse in Java sehr ähnlich ist, unterscheidet sich die Art der Implementierung erheblich.

+2

+1 wirklich wichtig, nicht zu erwarten, dass Muster dein Denken für dich tun, Muster sind nicht streng, Muster sind nicht nachsichtig, Muster sind nicht unter Kontrolle! – djna

6

Nein, Fabriken können den Zustand halten. Es hängt davon ab, was benötigt wird.

Ich würde vorschlagen, dass die Herstellung ist statisch scheint eine gute Wahl in der ersten Instanz - wenn Sie versuchen, die Statik zu vereinen, neigen Sie dazu, in Probleme zu laufen.

Steuern Sie weg, bis Sie sie speziell benötigen.

+0

In einigen Sprachen –

3

Nein, Werksklasse sollte standardmäßig nicht statisch sein. Tatsächlich sind statische Klassen in der OOP-Welt nicht willkommen, da sie auch einige Zustände vermitteln können und daher den globalen Anwendungszustand einführen. Wenn Sie nur ein Factory-Objekt benötigen, können Sie die Erstellung durch ein Singleton-Muster steuern.

Im Fall von Fabrik Methode - es ist in Ordnung, es statisch zu halten (eigentlich gibt es keinen anderen vernünftigen Weg zu gehen :)).

0

Ich denke, dass meine BlueCarFactory und meine RedCarFactory beide eine Methode createCar haben. Es ist nur vernünftig, die eigentliche Erstellungsmethode wiederzuverwenden, indem Sie sie parametrisieren. Man würde dann eine CarFactory(blue) und eine CarFactory(red) erstellen. Das bedeutet, dass das Objekt CarFactory eine Elementvariable benötigt, um die Farbe der produzierten Autos zu speichern.

Abschließend: Es macht keinen Sinn, die Methode einer Factory-Klasse statisch zu machen. Es macht Sinn, ein Singleton-Factory-Objekt zu erstellen.