Экземпляр класса доступа AS3 отовсюду

для моего текущего проекта я начинаю работать с AS3, и я написал класс ClipManager, где я могу определить MC, например «mainView», во время инициализации следующим образом:

clipManager:ClipManager = new ClipManager(mainView);

С моим clipManager теперь я могу легко загружать материал в mainView и т. д. Проблема в том, что я хочу, чтобы каждая кнопка во всем этом имела доступ к методам класса этого экземпляра для изменения mainView. Могу ли я иметь что-то вроде экземпляра глобального класса во Flash или есть более разумный способ добиться того, что я пытаюсь сделать?


person matteok    schedule 29.12.2011    source источник
comment
если вы импортируете класс, он становится глобальным для всего документа ActionScript   -  person mgraph    schedule 29.12.2011
comment
Я хочу, чтобы экземпляр был глобальным.   -  person matteok    schedule 29.12.2011


Ответы (1)


Вы можете либо добавить свой класс ClipManager как статический объект — например, объект бога — (возможно, ваш основной класс) и получить к нему доступ через него, либо вы можете использовать Шаблон Singleton.

Распространенный способ реализации в as3:

public class Singleton
{
    private static m_instance:Singleton = null; // the only instance of this class
    private static m_creating:Boolean   = false;// are we creating the singleton?

    /**
     * Returns the only Singleton instance
     */
    public static function get instance():Singleton
    {
        if( Singleton.m_instance == null )
        {
            Singleton.m_creating    = true;
            Singleton.m_instance    = new Singleton;
            Singleton.m_creating    = false;
        }
        return Singleton.m_instance;
    }

    /**
     * Creates a new Singleton. Don't call this directly - use the 'instance' property
     */
    public function Singleton()
    {
        if( !Singleton.m_creating )
            throw new Error( "The Singleton class can't be created directly - use the static 'instance' property instead" );
    }
}

Теперь, чтобы получить доступ к вашему классу, вы вызываете Singleton.instance. Будет только один экземпляр этого класса.

Что касается антипаттернов и т. д., то это уже другой пост :)

person divillysausages    schedule 29.12.2011