Singleton-класс в Flex

К настоящему времени я был довольно доволен качеством ответов Perl, которые я видел здесь. Многие самые опытные программисты Perl, которых я знаю от конференций, Perlmonks, use.perl.org, и т.д., кажется, присутствуют здесь и вопросы ответа серьезно и ясно. В случаях, где ответ был неправильным или просто плохим в некотором смысле продвижения плохой практики, те ответы были быстро определены, провалены и/или прокомментированы - на.

я - большой поклонник Perlmonks, но это - другой вид сайта, чем этот. Помимо того, чтобы быть характерным для Perl, это также имеет отдельные области, отложенные для рассмотрения модулей, регистрации фрагментов кода, рассмотрения книг, и т.д.

6
задан Kevin 21 August 2009 в 14:32
поделиться

4 ответа

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

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

17
ответ дан 8 December 2019 в 13:01
поделиться

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

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

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

0
ответ дан 8 December 2019 в 13:01
поделиться

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

-1
ответ дан 8 December 2019 в 13:01
поделиться

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

(edit: ahh, I'm just repeating phils link)

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

var b:Blah = new Blah(null);

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

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

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

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

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

.
2
ответ дан 8 December 2019 в 13:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: