[ascoders] Singletons & andere seltsame Erscheinungen (war: Static Classes an ASBroadcaster initialisieren)

  • From: Ralf Siegel <ralf@xxxxxxxxxxx>
  • To: ascoders@xxxxxxxxxxxxx
  • Date: Wed, 24 Sep 2003 20:14:29 +0200


Ich finde, Singleton Klassen sind unsauber.
Irgentwie sieht das Ganze aus wie ein Workaround, um OOP Unzulänglichkeiten
wieder gerade zu biegen.

Hehe, schön dass du das erwähnst - es gibt hier seit Monaten Grabenkämpfe um's Singleton. Die einen behaupten, Singletons versauen die Klassen-Hierarchie, die anderen - nunja, das Gegenteil.


Ich wollte nochmal mit den Leuten diskutieren, aber ein Streitpunkt ist wohl, dass abgeleitete Klassen - so diese auch Singleton spielen wollen - die Creator-Methode stillschweigend ohne Zwang überschreiben müssen, sonst wird der falsche Typ (eben eine Instanz der Unterklasse) zurückgeliefert. Möchtest du hingegen eine Klasse von einem Singleton ableiten, die kein Singleton mehr sein will, schleppst du die Creator-Methode immer durch die Hierarchie.

In dem Zusammenhang bin ich aber eben auf seltsame Dinge in ActionScript 2.0 gestoßen, wo man Vererbung von statischen Eigenschaften und Methoden im allgemeinen und für Singletons im speziellen sowieso vergessen kann ...

______________________________________________________________

[Bottom.as]
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Bottom
{

public static var up:String = "ups";

private function Bottom() {

}

        public static function saySomething():Void {
                trace("I feel down");
        }
}
______________________________________________________________

[Top.as]
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

class Top extends Bottom
{
        private function Top()
        {
        }
}

______________________________________________________________

[ main.fla ]
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

trace(Top.up);
Top.saySomething();
trace("-----------------------");
trace(Bottom.up);
Bottom.saySomething();
trace("-----------------------");
trace(Top.up);
Top.saySomething();

_______________________________________________________________

[ Ausgabe ]
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

undefined
-----------------------
ups
I feel down
-----------------------
ups
I feel down

_______________________________________________________________

Die statische Eigenschaft 'up' ist praktisch erst für die Klasse 'Top' verfügbar, wenn sie vorher über die Klasse 'Bottom' "angesprochen" wurde. Dasselbe gilt für die Methode 'saySomething'.

Kneift mich bitte jemand ;o(

ralf ....


------------------------------------------------------ Archiv : //www.freelists.org/archives/ascoders/ Optionen : //www.freelists.org/list/ascoders ------------------------------------------------------

Other related posts: