Синглтоны во 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]