Поймать правильное событие с подходящим слушателем? - PullRequest
0 голосов
/ 08 сентября 2010

Рассмотрим этот сценарий, у нас есть класс A , который является одноэлементным и имеет функцию Sum (a, b) **. Теперь у нас есть два класса ** Класс B и Класс C соответственно. Оба класса (B, C) вызывают функцию add и прослушивают событие.

Class A
{
    function add(a:int,b:int):void
    {
        c:int = a+b;
        dispatchEvent(new myEvent(myEvent.addComplete,c));
    }

}

Class B
{
    function addSomething():void
    {
          var objectA:A = new A();
          objectA.addEventListener(myEvent,onAddComplete);
          var a:int = 10;
          var b:int = 20;
          objectA.add(a,b); 
    }

    function onAddComplete(e:myEvent):void
    {
              trace(e.something);
     }
}

Точно так же есть классы C и D. Теперь, когда, допустим, оба класса вызывают функцию добавления A (когда A одноэлементный), как можно гарантировать, что правильный ответ будет возвращен нужному слушателю.

Во-вторых, что, если вызовы что-то меняют, есть ли блокировка в синглтоне?

1 Ответ

1 голос
/ 08 сентября 2010

Когда вы создаете экземпляр Singleton, вы не используете «new», иначе это не будет Singleton, вы будете продолжать создавать экземпляры класса A.Чтобы ваш класс был Singleton, можно создать только один экземпляр. Таким образом, когда вы вызываете A в других классах, вы вызываете тот же экземпляр A.

Обычно вы используете метод getInstance, которыйлибо вернуть экземпляр класса Singleton, если такового не существует, либо вернуть ранее созданный экземпляр A.

Просмотрите это для получения дополнительной информации: http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html

Обычно считается, что Singletonследует избегать, когда это возможно.Здесь вы найдете несколько постов, объясняющих, почему, вот пример:

Что такого плохого в синглетах?

В вашем примере вы можете сделать это, например:

class A
{
   function add( params:Object , dispatcher:EventDispatcher )
    { 
       c = params.a + params.b;
       dispatcher.dispatchEvent( new MyEvent(c) );
  }
}

class B
{
    private var _dispatcher:EventDispatcher = new EventDispatcher();

    function addSomething():void
    {
          var objectA:A = new A();
          _dispatcher.addEventListener(MyEvent.ADD,onAddComplete);
          var params:Object = {a:10 , b:20};
          objectA.add(params , _dispatcher); 
    }

    function onAddComplete(e:MyEvent):void
    {
              trace(e.something);
     }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...