Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Синглтон :) АС3 возможно? (http://www.flasher.ru/forum/showthread.php?t=102937)

Artureg 25.10.2007 22:26

Синглтон :) АС3 возможно?
 
Будет ли этот код соответсвовать аналогичному коду в Java?
т.е. будет ли создаватся только один екземпляр данного класса? Или у АС3 свои правила написания синглтона?

Код:

package kos.util{
        public class Imager{
               
                private var imager:Imager = null;
               
               
               
                private function Imager(){}
               
                static public function getInst():Imager{
                        if (imager==null)
                                imager = new Imager();
                        return imager;
                }
       
        }
}


Nirth 25.10.2007 23:00

Так нельзя. В флексе есть пути обхода для синглтонов.

Приватные конструкторы запрещены.

Artureg 25.10.2007 23:02

А без использования флекса?
А если сделать конструктор пабликом но сознательно его не вызывать?

Nirth 25.10.2007 23:16

Цитата:

но сознательно его не вызывать?
Так и делают. можно еще залочить конструктор.

Код:

package com.seeqpod.services
{
        public class SingletonExample
        {
                public static function get instance():SingletonExample
                {
                        if(_instance == null)
                        {
                                locked = false;
                                _instance = new SingletonExample();
                                locked = true;
                        }
                       
                        return _instance;
                }
                private static var _instance:SingletonExample = null;
                private static var locked:Boolean = true;
               
               
                public function SingletonExample()
                {
                        if(SingletonExample.locked)
                        {
                                throw new Error('this is Signleton class, use instance property instead');
                                return;
                        }                       
                }
        }
}


Artureg 25.10.2007 23:20

Спасибо, это лишнее. Если достаточно просто не обращатся к конструктору напрямую, это будет в самый раз.

vooparker 25.10.2007 23:28

вот ссылки в тему:
http://yarovoy.com/2007/10/24/single...ctionscript_3/
http://yarovoy.com/2007/10/20/single...tatic_members/

Artureg 25.10.2007 23:38

Спасибо

BlooDHounD 26.10.2007 01:08

с локом странный пример :)
зачем лок, если можно проверяеть есть ли экземпляр?

Кстати генерация ошибки не всегда нужна.
Например SharedObject не генерит ошибки, хотя синглтон :)
Код:

package {

        public class SingletonExample {

                private static const _instances:Dictionary = new Dictionary();

                public static function getInstance(param:Object):SingletonExample {
                        var instance:SingletonExample = _instances[param];
                        if (!instance) {
                                _instances[param] = instance = new SingletonExample();
                                instance.init(param);
                        }
                        return instance;
                }

                public function SingletonExample() {
                        super();
                }

                private function init(param:Object):void {
                        // инициализация
                }

        }
}

UPD: очипятался

Nirth 26.10.2007 01:44

Цитата:

Например SharedObject не генерит ошибки, хотя синглтон
SharedObject это не Singleton это Multiton.

Пример с локом легко трансформируется в Multiton.

BlooDHounD 26.10.2007 02:46

извините :) не знал :) один фиг лок лишний.


Часовой пояс GMT +4, время: 00:24.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.