Синглтоны во Flash (AS3)
Автор: Леонид Гудков
Иногда возникает необходимость наличия единственного экземпляра класса, особенно когда речь идет об использовании нескольких .swf файлов в одном.
Именно в такие моменты нас спасают синглтоны (Singletones).
Писал свой отладчик для флеша, написал свой класс Debugger, который должен был быть доступен в любом месте программы.
При этом экземпляр всегда должен был быть один. Ок, поступил я следующим образом:
package
{
class Debugger
{
static private var m_instance:Debugger = null;
public function Debugger()
{
// тут делаем инициализацию
}
static public function get instance():Debugger
{
if(m_instance == null)
m_instance = new Debugger();
return m_instance;
}
public function Trace(content:String):void
{
// тело функции
}
}
}Теперь в любом месте программы я мог получить экземпляр класса и быть уверенным что он один на всю флешку.
Например вот так:
Си стайл:
Debugger.instance.Trace("Hellow, World");можно так:
var debugger:Debugger = Debugger.instance;
debugger.Trace("Hellow, World");что тоже не комильфо.
Захотелось, чтобы можно было использовать так:
Debugger.Trace("Hellow, World");Сказано - сделано:
package
{
class Debugger
{
static private var m_instance:Debugger = null;
public function Debugger()
{
// тут делаем инициализацию
}
static public function instance():void
{
if(m_instance == null)
m_instance = new Debugger();
}
static public function Trace(content:String):void
{
instance();
// тело функции
}
}
}Готово. Теперь даже если в .swf, который мы подгрузим в основной .swf, будет использован наш класс, то мы будем уверенны, что его экземпляр будет общим на оба .swf.
P.S.
Все функции такого класса должны быть статик, как и поля класса, тогда мы можем удобно получить доступ к любой паблик функции и полю класса.
20 марта 2009
Комментарии [0]