Singleton (ActionScript3): Unterschied zwischen den Versionen

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Killua-x (Diskussion | Beiträge)
Die Seite wurde neu angelegt: == Verwendung von Singleton == Das Singleton ist eines der gängigeren Design Pattern.<br> Ein Singleton wird am besten bei Klassen verwendet, wo es man nur eine Instan...
 
Kowa (Diskussion | Beiträge)
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 32: Zeile 32:
<source lang="actionscript3">
<source lang="actionscript3">


public class Steuerung{
public class Steuerung
{
      private static var instance:Steuerung;
  private static var instance: Steuerung;
      private static var allowInstantiation:Boolean;


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


public static function getInstance():Steuerung {
    return instance;
        if (instance == null) {
  }
            allowInstantiation = true;
            instance = new Steuerung(new SteuerungPrivat());
            allowInstantiation = false;
          }
        return instance;
      }


public static function killInstance():Steuerung {
  public static function killInstance(): void
  if (instance != null) {
  {
            instance = null;
    instance = null;
            allowInstantiation = true;
  }
          }
 
        return instance;
  public function Steuerung(se:SteuerungPrivat)
}
  {}
}


public function Steuerung(se:SteuerungPrivat){
}
}}
internal class SteuerungPrivat {}
internal class SteuerungPrivat {}
</source><br>
</source><br>
Der Zugriff auf den Singleton ist nur über die Methode getInstance() möglich. Intern kann der Singleton auch andere Methoden haben auf die man via getInstance() auch selbst Zugriff hat.  <br>Beim Löschen des Singletons muss man auch schauen, dass auch die interne statische Instanz überschrieben wird. Andernfalls würde der Singleton beim nächsten Aufruf die alten Werte aus der Instanz bekommen.
Der Zugriff auf den Singleton ist nur über das Attribut <code>instance</code> möglich. Intern kann der Singleton auch andere Methoden haben auf die man via <code>instance</code> Zugriff hat.   
 
[[Kategorie:Flash]]

Aktuelle Version vom 3. Dezember 2010, 16:02 Uhr

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.