Ich schreibe ein Programm, wo ich unter vielen anderen Dingen drei Klassen brauche, die wir Schriftsteller, Speicher und Leser nennen können.Kann und muss ich Singleton-Muster vermeiden?
Writer muss auf die Speicherklasse sehr oft zugreifen, während Leser stattdessen etwas selten besonders im Vergleich zu Writer. Die Speicherklasse dient nur dazu, die Schreibvorgänge des Datenschreibers zu speichern. Das einzige, was der Autor macht, ist, einige kurze Datenstöße zu schreiben. Der Leser liest die geschriebenen Daten aus dem Speicher und leert dann den Speicher, um Speicherplatz freizugeben, damit der Schreiber neue Daten schreiben kann. Um einige Zahlen und eine Vorstellung von der Häufigkeit der Zugriffe zu geben, sagen wir, dass der Schreiber mehrmals in der Minute auf den Speicher zugreift und der Leser ungefähr einmal pro Stunde darauf zugreift.
Die Frage ist also, ob ich das Singleton-Muster in der Storage-Klasse verwenden muss oder reicht es aus, es als statische Klasse zu deklarieren?
Auch wie kann ich sicherstellen, dass, wenn die Reader-Klasse den Speicher verwendet, es die Speicherressource sofort freigibt, nachdem es die Daten aus dem Speicher gelesen und geleert hat? Die meiste Zeit sollte die Speicherklasse für den Schreiber verfügbar sein, um die Daten darin zu schreiben.
Die Singleton Ansatz sieht gut aus, vor allem, dass ich nicht von OOP Hintergrund bin. Ich habe gehört, dass es schlecht ist.
Und für mich klingt es mehr wie Gleichzeitigkeit und Synchronisationsproblem. Außerdem ist die richtige Verwendung von Konstruktoren zum Erstellen der Objekte die erste Wahl. – nobeh
Nein, es ist keine Hausaufgabe. Ich stimme zu, dass dies auch ein Nebenläufigkeits- und Synchronisationsproblem ist, obwohl es nur diesen seltenen Moment gibt, in dem ich sicherstellen muss, dass Schreiber und Leser nicht gleichzeitig auf den Speicher zugreifen. Deshalb möchte ich auch sicherstellen, dass der Leser so schnell wie möglich ausführt. Beachten Sie, dass der Leser diese Löschoperation ausführen muss, die tatsächlich schreibt (es sei denn, es gibt eine Möglichkeit, ohne zu schreiben zu spülen). – zaplec
Ich schlage vor, einen Blick auf verschiedene Optionen unter [java.util.concurrent.locks] (http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/locks/package-summary) zu werfen. html) – nobeh