2011-01-10 16 views
1

Ich möchte Folgendes tun: Ich habe eine Reihe von Klassen, die Eigenschaften XML-Dateien zum Laden, in ihrem statischen Abschnitt lesen. Einige Dateien teilen sogar eine Eigenschaftendatei, so dass es albern wäre, wenn sie dieselbe Datei wiederholt laden würden.Wie implementiert man ein statisches projektweites Präferenzsystem?

Ich möchte eine Singleton-Klasse erstellen, die eine bereits geladene Instanz einer Properties-Datei an jede Klasse zurückgibt, die sie anfordert. So weit, so einfach.

Allerdings habe ich mehrere dieser Dateien, die geladen werden müssen, so dass der natürliche Gedanke wäre, eine statische Basisklasse zum Lesen der Dateien zu schreiben, und dann Object-orient weg die Details für jede Unterklasse, indem Sie implementieren nur eine Methode zum Holen der Position.

Und dann habe ich gelernt, dass es nicht so etwas wie statische Vererbung ...

Wie kann ich dies implementieren, ohne auf statische Vererbung zu verlassen?

+0

Sind Sie sicher, dass Sie hier eine Vererbung benötigen? Es klingt wie alles, was Sie brauchen, ist eine Klasse, die Eigenschaften lädt, mit der Datei als Parameter laden. – nos

+0

Die Sache ist, dass verschiedene Einstellungsdateien verschiedene Funktionen steuern, und ich möchte nicht alle meine Einstellungen in eine Datei zusammenfassen. Auf diese Weise kann jedes Paket oder jede Gruppe von Klassen von einer Einstellungsklasse gesteuert werden, und das einzige, was ich tun müsste, um eine andere Einstellungsklasse zu implementieren, ist die Unterklasse der Basis, indem Sie ihr einen konkreten Ort geben. – Alex

Antwort

1

Wie (bitte die einfachen Methodennamen entschuldigen) angeben Sie die Datei geladen werden? Wäre es möglich, mehrere Dateien anstatt nur eines zu spezifizieren?

Ich würde auch überdenken mit dem Singleton-Muster. Sie könnten wahrscheinlich Dependency Injection verwenden, um Ihre Preferences-Schnittstelle in jede Klasse zu injizieren, die sie benötigt. Betrachten Sie beispielsweise die Art und Weise, wie Spring eine MessageSource-Schnittstelle über seinen ApplicationContext bereitstellt.

0

Eine Option besteht darin, eine abstrakte Basisklasse mit einer abstrakten Methode zu implementieren, die von den Extendern implementiert werden muss und die die Methoden zum Abrufen der Position angibt.

Beispiel:

public abstract class BaseReader { 
    public List<Property or whatever> readFile() { 
    // common reading logic here 
    } 

    public abstract String getXmlFileLocation(); // subclasses implement this 

} 
Verwandte Themen