Синглтон класс в Flex

У меня есть сомнения,.... Как бы вы создали класс Singleton во Flex...

Есть ли какое-либо соглашение, например, имя класса должно быть синглтонским или оно должно расширять любой другой класс.

Сколько классов Singleton может иметь проект?

Кто-нибудь может сказать в реальном времени об использовании класса Singleton?

Я планирую сохранить тексты для маркировки компонентов в классе Singleton... Это хороший подход.

5 ответов

Решение

Может червяков спрашивать о синглетонах!

Существует несколько различных вариантов создания синглетонов, в основном из-за того, что у AS3 нет частных конструкторов. Вот образец, который мы используем.

package com.foo.bar {

    public class Blah {

        private static var instance : Blah;

        public function Blah( enforcer : SingletonEnforcer ) {}

        public static function getInstance() : Blah {
            if (!instance) {
                instance = new Blah( new SingletonEnforcer() );
            }
            return instance;
        }

        ...
    }
}
class SingletonEnforcer{}

Обратите внимание, что класс SingletonEnforcer является внутренним, поэтому может использоваться только классом Blah (эффективно). Никто не может напрямую создать экземпляр класса, он должен пройти через функцию getInstance().

Надеюсь, что я не бью мертвых лошадей здесь:)

(edit: ааа, я просто повторяю ссылку phils)

Синглтонная реализация Gregors не защищает от вызова конструктора с нулевым значением, как в:

var b:Blah = new Blah(null);

У вас все еще будет только 1 экземпляр, но вызов конструктора все еще возможен со следующими последствиями.

Если вам абсолютно необходимо принудительно применять синглтон, конструктор должен убедиться, что параметр принудительное значение не равно нулю.

    public function Blah( enforcer : SingletonEnforcer ) {
      if(!enforcer){
        throw new Error("whoops!");
      }
    }

Вы также должны быть обеспокоены ApplicationDomain при загрузке SWF-файлов. Внешние SWF-файлы, использующие те же определения, могут иметь несколько одноэлементных экземпляров (по 1 в каждом отдельном домене приложения), если вы не укажете, что SWF-файл должен быть загружен в существующий домен приложения.

Это означает, что Blah.getInstance() в AAA.swf не совпадает с экземпляром Blah.getinstance() в BBB.swf, если AAA.swf загружает BBB.swf без экземпляра LoaderContext, который сообщает плагину о загрузке BBB.swf в тот же ApplicationDomain, что и AAA.swf

Сначала вы можете сослаться на предыдущий вопрос, чтобы узнать, как создать одноэлементный класс. Вы также можете найти больше информации в презентации Якова Файна.

Второй вопрос, ваш проект может иметь одинаковый класс, как вы считаете нужным, но он будет создавать только 1 экземпляр каждого. Например, в архитектуре cairngorm у вас есть 3 основных синглета: контроллер, сервис и модель. Количество актуальных занятий может сильно зависеть от вашего проекта.

Наконец, решения реального мира будут. У вас есть 2 компонента, которые должны общаться друг с другом, но вы не хотите, чтобы они знали, что другой существует. Это означает, что иногда компоненты есть, а иногда их нет... поэтому вам нужно, чтобы они были слабо связаны. Вы можете использовать синглтоны для передачи данных из одного компонента в другой без непосредственного "разговора" с ними.

Использование синглетонов - это хороший подход, если вам нужно передавать данные по вашему приложению от компонента к компоненту и вы хотите отделить их друг от друга.

package com.foo.bar
{
    public class MySingleton
    {
        private static var _instance:MySingleton = new MySingleton;
        private var _myName:String;

        public static function get instance():MySingleton
        {
            return _instance;
        }

        public function set myName(value:String):void
        {
            _myName = value;
        }

        public function get myName():String
        {
            return _myName;
        }

    }
}

Обратите внимание на отсутствие конструктора здесь.

Здравствуйте, вы можете проверить следующие примеры Flex Singleton Class на http://www.how-to-code.com/flex/flex-design-patterns/flex-singleton-class.html

Другие вопросы по тегам