[linux-l] [linux-l] Re: Java Frage: globales java.util.Properties Object verfügbar machen

Rocco Melzian Rocco.Melzian at TU-Berlin.de
Di Mai 17 14:11:35 CEST 2005


> sinnvoll wäre es dazu, im Konstruktor sicherzustellen, dass nur eine
> Instanz erzeugt wird. Stichwort Singleton-Muster.
> 
> Singletons werden üblicherweise nicht über den Konstruktor erzeugt,
> sondern haben eine get-Methode, die beim ersten Aufruf das Objekt
> baut.
> 
> Sorry if redundant, war aber in Deinem Sourcecode so noch nicht drin.
Danke für den Hinweis. Ich bin gerade dabei Java und OO in einem ersten größeren 
Projekt zu verwenden und daran zu lernen.

Habe nach "Singleton-Muster" gesucht und gefunden:

-----------------------------------------------------------------------
Eager-Variante: Die Implementation der Singleton-Klasse ist einfach.

class Singleton {
   private static Singleton singleton= new Singleton();
   private Singleton() {}  // keine externe Instanz möglich!

   public static Singleton getSingleton() {
     return singleton;
   }
}
-----------------------------------------------------------------------
Ich verstehe: Konstruktor: private, gesuchtes Objekt: private static, 
Get-Methode: public static.

Das heisst, in meinem Fall: wenn das Properties-Object zum ersten mal gebraucht 
wird, dann mit

//get properties object the first time
simProps=SimulationProperties.getSimulationProperties(passedConfigFile);

und ab dann immer mit
//get properties object
simProps=SimulationProperties.getSimulationProperties();

funktioniert! Dieser Mechanismus ist mir aber neu und ich muss ihn nochmal 
durchdenken und verstehen. Wenn ich getSimulationProperties() zweimal mit 
Parameter aufrufe, dann wird beim zweiten Mal kein neues Objekt erzeugt? Oder 
muss ich das im Konstruktor irgendwie abfangen und/oder testen? (wie)

------------------------------------------------------------------------
public class SimulationProperties {

	private static Properties simulationProperties = new Properties();
	...

	//constructor that creates class variable simulationProperties
	private SimulationProperties(String passedConfigFile) {
		...
	}

	//return the properties object
	public static Properties getSimulationProperties() {
		return (simulationProperties);
	}

	//create and return
	public static Properties getSimulationProperties(String passedConfigFile) {
		SimulationProperties simPropsCreater = new SimulationProperties(passedConfigFile);
		return (simulationProperties);
   	}
}





Mehr Informationen über die Mailingliste linux-l