2012-11-21 13 views
6

Czy istnieje sposób na stworzenie głównej klasy - opartej na głównej .fla - statycznej? więc moglibyśmy używać go tak jak w Javie, mogąc odwoływać się do niego z innych klas, ponieważ muszę przekazać instancję samej głównej klasy jako parametr do klasy, w przeciwnym razie stracę referencję. Próbowałem dodać przedrostek statyczny, ale wydaje mi się, że as3 na to nie pozwala.Statyczna Główna klasa - AS3

Odpowiedz

9

W klasie AS3 nie ma pojęcia klasy statycznej.

Można użyć Singleton narażać unikalną instancję głównego klasy:

public class Main extends Sprite { 

    public static var instance:Main; 

    public function Main() { 
     instance = this; 
    } 

... lub po prostu zaznaczyć narażać innych właściwości/metod jak static, chociaż staje się trudniejsze do opanowania.

muszę wspomnieć jednak, że stosując static czasami prowadzi do złego kodu projektu (zamiast można przekazać instancję Main do klas, które potrzebują go przez ich konstruktora na przykład)

+0

Utwórz interfejs dla głównej klasy i przekazuj go jako odniesienie do klas potomnych utworzonych w głównej. Ale miłą rzeczą w przypadku instancji jest to, że nie będzie wymagać referencji i jest dostępna na dowolnej warstwie kodu, ale jak powiedział Antoine, może to być pułapka na złe wzornictwo. – Gone3d

3

To nie będzie popularne odpowiedź, wiem ... Używanie właściwości statycznych do ujawniania instancji jest naprawdę złym pomysłem. Wzorzec Singleton jest bardzo popularny, ale nie powinien, prowadzi do złych praktyk i niepotrzebnie wiąże ze sobą klasy.

Musisz zadać sobie pytanie, czy naprawdę potrzebujesz odniesienia do głównej klasy w innych klasach? AS3 ma system zdarzeń, który może zapewnić Ci wszystkie luźne sprzęgi, których potrzebujesz. Jeśli obiekt wyświetlany musi komunikować się z główną instancją klasy, można to osiągnąć, wysyłając zdarzenia za pośrednictwem listy wyświetlania.

Problem zarządzania zależnościami najlepiej jest rozwiązywać za pomocą schematu wtrysku zależności (wiele z nich ma scentralizowany system przesyłania komunikatów, który zdecydowanie pokonuje listę zdarzeń poza listą). Jeśli czujesz, że któryś z popularnych (PureMVC, RobotLegs itp.) Jest przesadny, możesz łatwo stworzyć (prosty i ograniczony) samemu.

Jest mnóstwo narzędzi i wzorców nigdy kiedykolwiek konieczności polegania na pojedynczych lub statycznych instancji dostępowych, ponieważ one uczynić swoje życie nieszczęśliwy i kod kruche, mało elastyczne, nietestowalna, nierzetelne i buggy.

+0

To ma sens. Będę starał się ćwiczyć unikanie zarówno statycznego, jak i singletonowego i zachować kontrolę nad głównym. Muszę jednak to sprawdzić. Mogłeś podać przykład, ale dzięki za wskazówki. : S –