2017-12-31 21 views
0

Stellen Sie sich vor, ich habe eine Klasse namens FileManager. Diese Klasse behandelt das Erstellen von Dateien und das Abrufen von Daten aus diesen Dateien sowie das Laden und Speichern von Daten aus diesen Dateien. Diese Klasse muss immer nur eine Instanz haben. Sollte ich ein Singleton verwenden, um es als eine Instanz zu behalten (da das alles ist, was erforderlich ist) oder sollte ich jedes Mal eine neue Instanz erstellen?Wäre ein Singleton in diesem Fall geeignet?

Ich bitte, dass Sie Ihre Antwort mit einem soliden Grund mit Fakten unterstützen.

EDIT: Hier ist ein Beispiel mit dem Singleton. Als zusätzliche Frage, sollte dies eifrige oder faule Instanziierung verwenden? Was wäre der Vorteil für beide und was ist in diesem Fall und im Allgemeinen akzeptabler?

Der Code geht weiter mit Methoden, die die Dateien erstellen, Daten in diese Dateien speichern und Daten aus diesen Dateien laden. Diese Methoden werden nur in einer Klasse aufgerufen. Der Code hat dann Getter, die in verschiedenen Klassen verwendet werden.

+2

Trägt es stateful Informationen? Wenn nicht, würde ich mir überlegen, ob ich nur die Methoden 'static' (oder eine statische Utility-Klasse) erstellen soll. Wenn dies der Fall ist, ist diese Zustandsinformation über mehrere Zugriffspunkte hinweg (d. H. Mehrere Threads/Klassen) gemeinsam nutzbar? Wenn nicht, sollten Sie die Verwendung eines Singletons vermeiden. Basierend auf Ihrer beschränkten Beschreibung würde ich mich einer Utility-Klasse zuwenden, realistisch, alle Informationen, die die Klasse benötigt, können über Parameter an die Methoden weitergegeben werden - aber das bin ich. – MadProgrammer

+0

Vielleicht möchten Sie auch einen Blick auf [ dieses Blog] (https://dzone.com/articles/java-singletons-using-enum) für eine bessere Singleton-Implementierung. Ich würde auch vorschlagen, dass es keinen Sinn macht, dass die Eigenschaften "statisch" sind. – MadProgrammer

+0

Sie wollen keinen Singleton. Sie sind eigentlich ziemlich selten. Die einzige Zeit, an die ich mich erinnern kann, eine zu erstellen, ist für einen DB-Verbindungspool, in dem sie Verbindungen über Threads geteilt hat. – Christian

Antwort

1

Ich denke nicht, es ist eine gute Idee, eine öffentliche getInstance-Methode hier zu implementieren. Ist das eine bessere Methode, einige Methoden namens "saveXXFile", "readXXFile" in dieser Klasse zu implementieren? Auf diese Weise können Sie auch Multithreading-Fehler vermeiden, die in Ihrem Code auftreten können.

In einem anderen Wort, wenn ich dies schreibe, kann ich einige Methoden "saveXXFile", "readXXFile" in dieser Klasse kapseln, anstatt die Datei Instanzen der Klassenbenutzer ausgesetzt.

Verwandte Themen