"private" Singleton?

  • Hallo Zusammen!

    Die Fragestellung mag jetzt vielleicht blöd klingen, aber ich weiss nicht so genau, wie ich es formulieren soll: Wie kann ich einen "privaten" Singleton machen? Was ich machen kann ist:

    -) "normale Klasse": Für jeden Benutzer, bei jedem Aufruf verschieden.
    -) Singleton: Für jeden Benutzer, bei jedem Aufruf gleich.
    -) "private Singleton": Für EINEN Benutzer, bei jedem Aufruf gleich. Pro Benutzer verschieden.

    Ich hoffe, ich hab das halbwegs verständlich ausgedrückt.

    Thanx 4 help.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • letzteres würde ich mittels einer Map lösen, wobei als Key der Benutzer dient, als Value die Instanz. Wenn noch keine Instanz existiert, wird eine neue erzeugt, andernfalls jene aus der Map zurückgeliefert.

    Informatik @ TU Wien (1998 - 2005)

  • so was Ähnliches hab ich mir gebastelt ... aber: Gibt es in Java keine "vordefinierte" Struktur, mit der man das lösen kann?

    *** Make it idiot proof, and someone will build a better idiot. ***

  • Zitat von maciek

    so was Ähnliches hab ich mir gebastelt ... aber: Gibt es in Java keine "vordefinierte" Struktur, mit der man das lösen kann?

    Was ist denn fuer dich ein Benutzer? Der Kontext vom Client Code, der das Singleton benutzt? Wohl nicht, denn dann waehre ja dein private singleton == normale instanz einer klasse. :)

    Andererseits gibt es ja keine "Benutzer" auf ebene der programmiersprache, also kann es auch keine datenstruktur dafuer geben.

    bitte aufklaehren.

  • naja ... ich hab irgendwie das Problem, dass ich zwar Sachen in einer Session speichern kann, nur komm ich ohne den Request nicht ran. Den Request hab ich wiederum nur in Servlets. Es ist aber nicht unbedingt jede Klasse, die userspezifische Daten braucht ein Servlet. Damit müsste ich die Servlet-Infos immer weiterreichen ... ist für mich nicht die optimalste Lösung.

    Irgendwo hab ich auch gelesen, dass man threadspezifische in einer Variablen speichern kann. Nachdem ja das Servlet das ursprünglich eine Kette von Klassen aufruft, auch ein Thread ist ... könnte man so vielleicht was drehen?

    Im Prinzip geht's auch darum, dass ich innerhalb eines Requests eine Variable setzen kann, die für diesen Request (= Thread = Benutzer) immer den gleichen Wert hat.

    Das könnte ich z.B. dazu nutzen: Ich hab einen Errorhandler, der nach auftreten eines Fehlers verschiedene Aktivitäten durchführt. Beim Ausführen dieser Aktivitäten tritt wieder ein Fehler auf, der vom gleichen ErrorHandler behandelt werden würde ... -> infinite Loop. Wenn ich aber im Thread speichern kann, wie oft die Errorhandler-Klasse von dem aktuellen User aufgerufen wurde ...

    Hilft das zu verstehen worauf ich hinaus möchte? Vielleicht ist das Denken auch ziemlich PHP-entwicklungstechnisch vorbelastet ... ich bin für Vorschläge offen.

    By the way: Das Exceptionhandling hab ich nach dieser Methode gelöst. Was haltet Ihr davon?

    *** Make it idiot proof, and someone will build a better idiot. ***

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!