Variablen zur Laufzeit global speichern (Registry Pattern?)

Djinndrache

Bekanntes Mitglied
Hallo,

Ich brauche im Prinzip eine Klasse, die Variablen von primitiven Datentypen speichert und zur Laufzeit jeder anderen Klasse anbieten kann.

Ich kenne das von PHP so, dass man (dank assoziativer Arrays) ein Registry Design Pattern anwenden kann. Diese Registry ist Singleton, kann somit zur Laufzeit von überall problemlos erreicht werden und hat eine einfache set und get Methode, die einen key und ein value ins Array schreibt (bzw anhand des keys den value zurückgibt).


Gibt es so etwas in der Art von Hause aus bei Java?
Falls nicht, wie baue ich mir so eine Registry selbst? Als assoziatives Array könnte ich eine Map nehmen, dann hätte ich einen key und einen value. Das Problem hier wäre aber, wenn ich verschiedene Datentypen speichern will. Der key könnte einfach ein String sein, soweit klar. Aber was ist mit dem value? Sagen wir ich will speichen ob Antialiasing aktiviert ist (boolean) und irgendeine Breite von einem Fenster (int). Ich kann doch nicht ein boolean und ein int in die selbe Map packen!?


Ich könnte einen kleinen Denkanstoß gebrauchen :)
 

Djinndrache

Bekanntes Mitglied
Um nicht ganze ohne Code da zu stehen, habe ich einen kleinen Versuch gewagt eine Java-Registry zu schreiben. Ich bin allerdings noch nicht wirklich ganz glücklich damit. Geht das nicht eleganter?

Java:
import java.util.HashMap;

public class Registry {

	private static Registry singleton = null;
	protected HashMap<String, Boolean> booleanMap = new HashMap<String, Boolean>();
	protected HashMap<String, Integer> intMap = new HashMap<String, Integer>();
	protected HashMap<String, Long> longMap = new HashMap<String, Long>();
	protected HashMap<String, Float> floatMap = new HashMap<String, Float>();
	protected HashMap<String, Double> doubleMap = new HashMap<String, Double>();
	protected HashMap<String, Character> charMap = new HashMap<String, Character>();
	protected HashMap<String, String> stringMap = new HashMap<String, String>();

	private Registry() {
	}

	public static Registry get() {
		if (singleton == null) {
			singleton = new Registry();
		}
		return singleton;
	}

	public boolean contains(String key) {
		return (booleanMap.containsKey(key) || intMap.containsKey(key) || longMap.containsKey(key) || floatMap.containsKey(key)
				|| doubleMap.containsKey(key) || charMap.containsKey(key) || stringMap.containsKey(key));
	}

	public boolean getBoolean(String key) {
		return booleanMap.get(key);
	}

	public int getInt(String key) {
		return intMap.get(key);
	}

	public long getLong(String key) {
		return longMap.get(key);
	}

	public float getFloat(String key) {
		return floatMap.get(key);
	}

	public double getDouble(String key) {
		return doubleMap.get(key);
	}

	public char getChar(String key) {
		return charMap.get(key);
	}

	public String getString(String key) {
		return stringMap.get(key);
	}

	public void put(String key, boolean value) {
		booleanMap.put(key, value);
	}

	public void put(String key, int value) {
		intMap.put(key, value);
	}

	public void put(String key, long value) {
		longMap.put(key, value);
	}

	public void put(String key, float value) {
		floatMap.put(key, value);
	}

	public void put(String key, double value) {
		doubleMap.put(key, value);
	}

	public void put(String key, char value) {
		charMap.put(key, value);
	}

	public void put(String key, String value) {
		stringMap.put(key, value);
	}
}
 

FerFemNemBem

Bekanntes Mitglied
Mahlzeit,

bei Dir ist es moeglich, einem Key saemtliche Typen zuzuweisen - soll heissen: "meinKey" kann in allen 7 Maps landen. Ist das gewollt?

Mach doch einfach eine Map<String, Object>. Da kannst Du alles reinpacken und stellst gleichzeitig sicher, dass ein Key nur einmal vorkommt.

Gruss, FFNB.
 
M

maki

Gast
Darf man fragen wozu das gut sein soll?

Mag sein dass das in PHP Sinn ergibt(?), in Java, einer OO Sprache, ist das sicherlich nicht so sicher.. globale Variablen zB. will man in OOP Sprachen normalerweise gar nicht haben.
 

Djinndrache

Bekanntes Mitglied
Mahlzeit,

bei Dir ist es moeglich, einem Key saemtliche Typen zuzuweisen - soll heissen: "meinKey" kann in allen 7 Maps landen. Ist das gewollt?

Mach doch einfach eine Map<String, Object>. Da kannst Du alles reinpacken und stellst gleichzeitig sicher, dass ein Key nur einmal vorkommt.

Gruss, FFNB.

Nein, das ist natürlich nicht gewollt, der Code war nur kurz runtergeschrieben um zu skizzieren was ich meine.
Reicht es da einfach ein Object einzuspeichern, oder wäre es sinnvoller ein generic RegistryEntry<T> anzulegen?

Darf man fragen wozu das gut sein soll?

Mag sein dass das in PHP Sinn ergibt(?), in Java, einer OO Sprache, ist das sicherlich nicht so sicher.. globale Variablen zB. will man in OOP Sprachen normalerweise gar nicht haben.

Ich habe diese Idee verfolgt um Einstellungen zur Laufzeit zu speichern und zu verwalten. Sagen wir ein Benutzer möchte in einem Grafikprogramm das Antialiasing (de)aktivieren, so könnte ich dies als boolean in einer Registry speichern. Diese Registry kann diese Einstellung dann jeder anderen Klasse mitteilen, die Informationen zu dieser Benutzereinstellung benötigt.
Ein anderes Beispiel wäre vielleicht in einer Art Paint-Programm um das aktuell gewählte Tool und die Farbe zu speichern, wobei hier wohl schon fast get und set Methoden besser oder zumindest ausreichend wären.
Außerdem könnte ich die Registry so erweitern, dass man RegistryListener hinzufügen kann; somit würden alle Klassen, die die aktuelle Antialiasingeinstellung benötigen, direkt benachrichtigt werden, wenn es Änderungen gibt, und könnten zur Laufzeit diese Einstellung jederzeit berücksichtigen.

Das erscheint mir derzeit jedenfalls sinnvoller als wenn ich eine Klasse habe, die die Antialiasingvariable (mit get und set Methoden) hat und bei jedem Wertewechsel der Variable noch sämtliche interessierte Klassen mit notify-Methoden benachrichtigen muss, dass es einen neuen Wert abzuholen gibt.

In PHP hab ich das Registry-Pattern in Verbindung mit dem MVC-Pattern kennengelernt. Dort habe ich insbesondere gern per Controller Variablen gespeichert, die der View (also quasi das Template) dann abrufen kann. (Somit war der Code sehr schön vom visuellen Design getrennt und das HTML/CSS-Layout konnte von kreativen Leuten erstellt werden, die absolut null Plan von PHP haben)


Ich bin aber sehr aufgeschlossen, wenn es eine bessere Möglichkeit in Java gibt, um solcherlei Einstellungen zur Laufzeit zu verwalten.
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
Normalerweise sollte man dazu ein DI-Framework wie Spring verwenden, in welchem man konfigurieren kann, welche Objekte welche Abhängigkeiten besitzen. Benötigt eine Klasse irgendwelche Settings, wird das einfach konfiguriert und ist zur Laufzeit vorhanden. Siehe auch Dependency Injection ? Wikipedia
 
M

maki

Gast
Ich habe diese Idee verfolgt um Einstellungen zur Laufzeit zu speichern und zu verwalten.
Für Konfigurationen macht das Sinn.
Für MVC weniger ;)

Viele Frameworks (Apache commons, Spring, etc. pp.) bieten eine Config bzw. Configuration Klasse die das abdeckt.
Ist aber nix verkehrtes daran, wenn du dir das selber schreibst, solange es richtig ist ;)

Deine "Registry" nutzt aus irgendeinem Grund protected (??) Instanzvariablen, dein Singleton ist nicht Threadsicher...
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Erste Schritte Variablen in abhängigkeit von Git branch Allgemeine Java-Themen 7
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
P static Blocks und variablen Allgemeine Java-Themen 41
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
W Lebendige Variablen herauslesen Allgemeine Java-Themen 1
K Summierung einer Variablen Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
K Static Variablen verbieten Allgemeine Java-Themen 10
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
F Variablen Variablen schachteln Allgemeine Java-Themen 6
7 6 int variablen vergleichen Allgemeine Java-Themen 34
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
R Übergreifende Variablen? Allgemeine Java-Themen 10
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
C Classloading und statische Variablen Allgemeine Java-Themen 2
K Variablen speichern Allgemeine Java-Themen 2
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
V Typargument einer Variablen erfragen Allgemeine Java-Themen 4
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
G Thread variablen Sichtbarkeit Allgemeine Java-Themen 15
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
M Bezeichnung für Component-Variablen Allgemeine Java-Themen 6
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
A Überschreibung von Variablen Allgemeine Java-Themen 3
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
B globale und lokale Variablen Allgemeine Java-Themen 17
G referenz von variablen Allgemeine Java-Themen 9
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
S Variablen und ihre Tücken. Allgemeine Java-Themen 7
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
C dynamische variablen Namen! Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
P Objekt- Variablen Allgemeine Java-Themen 16
K Environment Variablen per java -D weitergeben Allgemeine Java-Themen 9
D in class-Dateien nach variablen suchen! Allgemeine Java-Themen 5
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22
B Reguläre ausdrücke mit variablen? Allgemeine Java-Themen 12
MQue JButton an verschiedenen Variablen Allgemeine Java-Themen 2
T Unabhängigkeit von Variablen/ Objekten. Allgemeine Java-Themen 6
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
L Sichtbarkeit von Variablen / getMethode Allgemeine Java-Themen 4
H Variablen (A1, A2, A3 mit A_irgendetwas aufrufen) ohne Array Allgemeine Java-Themen 5
M Variablen in einer .doc Vorlage ersetzen Allgemeine Java-Themen 4
A Reflection - Variablen innerhalb einer Methode ermitteln Allgemeine Java-Themen 9
E Zugriff auf Variablen äusserer Klassen Allgemeine Java-Themen 2
M Variablen in Klasse verpacken? Allgemeine Java-Themen 10
F Allegemeiner Datentyp für Objekte und Primitive Variablen Allgemeine Java-Themen 6
W Array mit Variablen aus Vararg füllen Allgemeine Java-Themen 4
S Problem mit Boolean Variablen Allgemeine Java-Themen 8
A [SOLVED] Classpath und statische Variablen Allgemeine Java-Themen 6
J variablen wert ändernung mit einer art actionlistener? Allgemeine Java-Themen 4
C klassenübergreifende variablen Allgemeine Java-Themen 3
J 28 Variablen vergleichen und die höchsten addieren Allgemeine Java-Themen 15
T ungewollter Zugriff auf private Variablen? Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben