Beim Einsatz des Singleton-Patterns im GWT-Bereich gibt es eine Kleinigkeit zu beachten. Man kann dies zum Beispiel wie gewohnt in der folgenden Form verwenden:
[java]
public SingletonClass {
private static final SingletonClass singleton = new SingletonClass();
private SingletonClass() {
}
public static SingletonClass getInstance() {
return singleton;
}
}
[/java]
Man kann dabei natürlich auch auf Abwandlungen ausweichen. Die Wikipedia bietet hier noch Ideen für andere Formen an.
Zu beachten für das GWT ist jetzt noch, dass in der Klasse Entry Point kein Singleton benutzt werden darf. Daher muss man ggf. das Singleton in einen Wrapper packen.
So z.B. (Die Methode getView() würde in diesem Fall ein Widegt zurückliefern):
[java]
public class Application extends Composite {
public Application() {
initWidget(SingletonClass.getInstance().getView());
}
}
[/java]
Der zugehörige Entry Point schaut dann wie folgt aus:
[java]
public class EntryPointOfApplication implements EntryPoint {
/**
* This is the entry point method.
*/
public void onModuleLoad() {
Composite application = new Application();
// Add it to the root panel.
RootPanel.get().add(application);
}
}
[/java]
EDIT: Vielen Dank für den Hinweis eines aufmerksamen Lesers. Natürlich muss die Methode “getInstance” und die zurückgelieferte Klassenvariable mit “static” deklariert sein.

das mit dem Singelton kann doch gar nicht funktionieren.
Wie willst du eine Methode aufrufen von einer Klasse die man nicht erstellen kann (Da Konstructor privat)??
Die Methode getInstance() ist eine Klassen Methode, dei eine Klassen Variable zurückliefert. Du solltest dir vielleicht mal den wiki Artikel durchlesen. (als tip beides muss static sein)
Dass ist ja peinlich sowas in Netz zu stellen. Sorry
Code:
Class A {
private static A singelton;
private A() {}
public static A getInstance() {
if (singelton == null) {
singelton = new A();
}
return singelton;
}
Ich habe mit GWT 2.1.1 gerade mal den Test gemacht und ein Singleton in meiner EntryPoint-Klasse verwendet. Ging ohne Probleme!
Habe auch Development Mode und “kompilierten Modus” getestet. Beides kein Problem.
Warum meinst Du, dass das nicht gehen sollte? Ich will ja nichts übersehen …
Hallo Thomas,
der Artikel bezog sich auf eine sehr viel frühere GWT-Version. Möglicherweise wurde von Google dort auch etwas geändert. Danke für das Feedback.
Patrick