Singleton-Klasse mit parameter

Ich bin die Entwicklung von computer-vision-Anwendung und ich benötige Classifier Klasse. Diese Klasse wird unveränderlich pro ausführen der Anwendung, und es lädt die trainierten Daten von der Festplatte auf die Initialisierung. Ich will, um sicherzustellen, dass das gesamte Programm haben Zugang zu derselben ausgebildet Daten, und ich will block Neuladen der von der Festplatte, sobald Sie geladen werden.

Was ich nachdachte, war, entweder eine statische Klasse oder singleton. Ich bin mir nicht sicher, wie Sie Sie zum laden von Daten in statische Klasse, weil der Pfad zur Daten-Datei ist nicht wissen, zu compile-Zeit - es werden Programm-argument. Also ich dachte an Singleton-pattern, aber da ich nicht weiß, wie Sie zu initialisieren dynamisch.

Meine Idee war folgende:

class Singleton {
    private static Singleton instance;
    private Singleton() { ... }
    private static SomeDataObject data;

    public static Singleton getInstance() {
        if(instance == null)
            instance = new Singleton();

            return instance;
    }

    public static init(string dataPath){
        if(data == null)
             loadDataFromFile(dataPath)
    }
}

Dies würde nicht arbeiten, denn ich habe keine Kontrolle, welche Methode zuerst aufgerufen werden.

Ich weiß, der richtige Weg wäre, um die Instanz erstellen, die mit Daten am Anfang und pass es auf alle Klassen und Methoden, die es brauchen, aber das ist eigentlich nicht die Allgemeine Lösung. Ich kann verfolgen, alle Anrufe zu Klassifizierer in meinem eigenen code, aber wenn ich es machen würde, den code als API, das wäre ein problem.

Kurz, wie Sie initialisiert singleton zur Laufzeit?

Wie wird das Programm argument dataPath programmatisch zugänglich?
Sie brauchen nicht beide eine statische singleton-Instanz und - Daten-Objekt. Auch Ihre aktuelle singleton-Implementierung ist nicht thread-sicher.
es könnte entweder von der GUI oder command-line-argument
Zunächst, Sie brauchen, um sicher zu sein, müssen Sie die Verwendung des Singleton-Musters. Singleton sollte verwendet werden, wenn Sie brauchen, um > Sicherstellen, dass nur eine Instanz einer Klasse erstellt wird. < UND > ein globaler Zugriffspunkt auf das Objekt. < Quelle: oodesign.com/singleton-pattern.html Es scheint, dass Sie brauchen nicht ein Singleton. Globale Variablen sind schlecht, Singletons zu.
Ich brauche eine einzige Instanz von SomeDataObject zugänglich und sollte diese Instanz zugegriffen, die von mehreren anderen Arten von Klassifikatoren, nicht notwendig, den Austausch von einigen übergeordneten Klasse.

InformationsquelleAutor jnovacho | 2013-02-19

Schreibe einen Kommentar