Как в as3 можно избавиться от оператора switch-case?

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.

Как в as3 можно избавиться от оператора switch-case?

Сообщение Agiliter » 02 дек 2014, 13:16

Добрый день!
Использую в программе фабрику создания экземпляров животных
  1. public class AnimalFactory
  2.     {
  3.         public function AnimalFactory() { } 
  4.        
  5.         public function createAnimal(typeAnimal:String):Animal
  6.         {
  7.             switch(typeAnimal)
  8.             {              
  9.                 case "dog":
  10.                     return new Dog();                  
  11.                     break;
  12.                 case "cat":
  13.                     return new Cat();
  14.                     break;
  15.                 case "rabbit":
  16.                     return new Rabbit();
  17.                     break;
  18.                                 ...                        
  19.             }
  20.             return null;
  21.         }      
  22.     }


Соответственно, создание экземпляра происходит примерно так:
  1. animalFactory:AnimalFactory = new AnimalFactory();
  2. animal1:Animal = animalFactory.createAnimal("dog");


Как в AnimalFactory можно избавиться от оператора switch-case? Ибо типов животных много, они постоянно добавляются/удаляются, и всё это как минимум не очень удобно. Может быть в as3 есть какие-то возможности вызывать конкретный класс по стринговому идентификатору или что-то вроде ссылок на функции, как в c++?
С уважением,
М.Ф.
Agiliter

 
Автор темы
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46
Благодарил (а): 29 раз.
Поблагодарили: 0 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: Как в as3 можно избавиться от оператора switch-case?

Сообщение XELAD » 02 дек 2014, 17:27

  1. import flash.system.*;
  2. import flash.utils.*;
  3. var str:String = "dog";
  4. if(ApplicationDomain.currentDomain.hasDefinition(str))
  5. {
  6.    var cls:Class = getDefinitionByName(str) as Class;
  7.    var mc = new cls();
  8. }

Проверку на наличие данного класса (hasDefinition) можно убрать, если вы уверены, что класс str будет существовать, иначе получите Error при попытке создать несуществующий класс.

За это сообщение автора XELAD поблагодарил:
Agiliter
XELAD

 
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25
Благодарил (а): 13 раз.
Поблагодарили: 24 раз.


Вернуться в Программирование на Flash



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0