2012-11-21 5 views
6

Gibt es eine Möglichkeit, die Hauptklasse - die auf dem Hauptteil .fla - statische zu machen? also könnten wir es wie in Java verwenden, da wir es von anderen Klassen aus referenzieren können, weil ich die Instanz des main selbst als Parameter an eine Klasse übergeben muss, sonst verliere ich die Referenz. Ich habe versucht, ein statisches Präfix hinzuzufügen, scheint aber as3 erlaubt es nicht.Statische Hauptklasse - AS3

Antwort

9

Es gibt kein Konzept der statischen Klasse in AS3.

können Sie die Singleton-Muster verwenden, um die einzigartige Instanz der Hauptklasse aussetzen:

public class Main extends Sprite { 

    public static var instance:Main; 

    public function Main() { 
     instance = this; 
    } 

... oder markieren Sie einfach andere Eigenschaften/Methoden wie static aussetzen, obwohl es schwieriger zu verwalten wird.

Ich muß erwähnen, obwohl das mit static manchmal zu schlechtem Code-Design führt (stattdessen können Sie die Instanz von Main Klassen übergeben, die sie durch ihren Konstruktor zum Beispiel benötigen)

+0

Erstellen Sie eine Schnittstelle für die Hauptklasse und übergeben Sie diese als Referenz an die untergeordneten Hauptklassen. Aber das Schöne an Instanzen ist, dass sie keine Referenzen benötigen und auf jeder Ebene im Code verfügbar sind, aber wie Antoine sagte, kann dies eine Falle für schlechtes Design sein. – Gone3d

3

Dies wird nicht die populär sein Antwort, ich weiß ... Die Verwendung von statischen Eigenschaften zum Aussetzen von Instanzen ist eine wirklich schlechte Idee. Das Singleton Anti-Pattern ist sehr beliebt, sollte es aber nicht sein, es führt zu schlechten Praktiken und bindet die Klassen unnötigerweise aneinander.

Sie müssen sich fragen, ob Sie wirklich auf die Hauptklasse in anderen Klassen verweisen müssen? AS3 verfügt über ein Event-System, das Ihnen alle losen Verbindungen zur Verfügung stellt, die Sie benötigen. Wenn ein Anzeigeobjekt mit der Hauptklasseninstanz kommunizieren muss, kann dies durch Senden von Ereignissen durch die Anzeigeliste erreicht werden.

Das Problem der Abhängigkeitsverwaltung wird am besten durch ein Framework zur Abhängigkeitsinjektion behandelt (von denen viele ein zentralisiertes Nachrichtensystem haben, das die Ereignisse über die Displaylist bei weitem übertrifft). Wenn Sie das Gefühl haben, dass eines der beliebtesten (PureMVC, RobotLegs, etc.) zu viel ist, können Sie es einfach (einfach und begrenzt) selbst erstellen.

Es gibt viele Tools und Patterns, die sich niemals auf Singletons oder statische Accessoren verlassen müssen, weil sie Ihr Leben miserabel machen und Ihr Code spröde, unflexibel, unbeständig, unzuverlässig und fehlerhaft ist.

+0

Sinn macht. Ich werde versuchen, sowohl Statik als auch Singleton zu vermeiden und die Kontrolle über Main zu behalten. Ich muss jedoch suchen, wie es geht. Du hättest ein Beispiel geben können, aber trotzdem danke für die Anweisungen. : S –