Singleton (ActionScript3)

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Version vom 3. Dezember 2010, 18:02 Uhr von Kowa (Diskussion | Beiträge) (→‎Beispiel der Implementierung in Flash3)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Verwendung von Singleton

Das Singleton ist eines der gängigeren Design Pattern.
Ein Singleton wird am besten bei Klassen verwendet, wo es man nur eine Instanz dieser Klasse benötigt.
So könnte man bei Gruppenarbeiten damit verhindern, dass Kollegen eine Instanz einer Klasse erstellen,
wenn man das schon selbst getan hat. In der Regel hat man auch global zugriff auf den Singleton.

Vorteile von Singleton

  • es wird verhindert dass über den new Operator neue Objekte erzeugt werden
  • ein gesteuerter Zugriff ist möglich, der immer die selben Ergebnisse zurückliefert
  • man kann Singletons ableiten und notfalls gewisse methoden überschreiben (Vererbung)
  • gute Alternative zu globale Variablen

Nachteile von Singleton

  • man kann es meist auch anders lösen
  • Singleton können sehr unflexibel sein
  • durch Singleton kann man leicht verleitet werden, eher prozedual anstatt objektorientiert zu programmieren
  • Singletons lassen sich schlecht testen

Probleme in Flash und ein Lösungsweg

In Actionscript ist es leider nicht möglich Konstruktoren auf private zu setzen.
Aber würde man den Konstruktor einfach public stehen lassen, so drohe eine mögliche Manipulation von Außen.

Mit einem Trick kann man eine gewisse Privatisierung des Konstruktors.
In diesem Fall passiert das über die interne Klasse SteuerungPrivat, welche nur von Steuerung aus erreichbar ist.

Beispiel der Implementierung in Flash3

Für das klassische Singleton wird eine statische Methode implementiert, welche das Objekt erzeugt und zurückgibt.

public class Steuerung
{	
  private static var instance: Steuerung;

  public static function get instance(): Steuerung 
  {
    if (instance == null) 
      instance = new Steuerung(new SteuerungPrivat());

    return instance;
  }

  public static function killInstance(): void 
  {
    instance = null;
  }

  public function Steuerung(se:SteuerungPrivat)
  {}
}

internal class SteuerungPrivat {}


Der Zugriff auf den Singleton ist nur über das Attribut instance möglich. Intern kann der Singleton auch andere Methoden haben auf die man via instance Zugriff hat.