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

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

6 голосов
/ 21 августа 2009

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

Существует ли какое-либо соглашение, например, имя класса, например, Singleton, или расширение любого другого класса.

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

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

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

Ответы [ 5 ]

17 голосов
/ 21 августа 2009

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

Существует несколько различных вариантов создания синглетонов, в основном из-за того, что 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 ().

2 голосов
/ 21 декабря 2009

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

(редактировать: ааа, я просто повторяю ссылку 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 в том же домене приложения, что и AAA.swf

0 голосов
/ 28 марта 2013
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;
        }

    }
}

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

0 голосов
/ 18 декабря 2009

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

0 голосов
/ 21 августа 2009

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...