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

То что касается флеша, но не касается ВКонтакте API. Например проблемы при создании прыгающего мячика.
Ответить
Agiliter
Сообщения: 112
Зарегистрирован: 01 фев 2014, 13:46

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

Сообщение Agiliter »

Добрый день!
Использую в программе фабрику создания экземпляров животных

Код: Выделить всё

public class AnimalFactory    {        public function AnimalFactory() { }                 public function createAnimal(typeAnimal:String):Animal        {            switch(typeAnimal)            {                               case "dog":                    return new Dog();                                       break;                case "cat":                    return new Cat();                    break;                case "rabbit":                    return new Rabbit();                    break;                                ...                                     }            return null;        }           }
Соответственно, создание экземпляра происходит примерно так:

Код: Выделить всё

animalFactory:AnimalFactory = new AnimalFactory();animal1:Animal = animalFactory.createAnimal("dog");
Как в AnimalFactory можно избавиться от оператора switch-case? Ибо типов животных много, они постоянно добавляются/удаляются, и всё это как минимум не очень удобно. Может быть в as3 есть какие-то возможности вызывать конкретный класс по стринговому идентификатору или что-то вроде ссылок на функции, как в c++?
XELAD
Сообщения: 205
Зарегистрирован: 17 июл 2012, 05:25

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

Сообщение XELAD »

Код: Выделить всё

import flash.system.*;import flash.utils.*;var str:String = "dog";if(ApplicationDomain.currentDomain.hasDefinition(str)){   var cls:Class = getDefinitionByName(str) as Class;   var mc = new cls();}
Проверку на наличие данного класса (hasDefinition) можно убрать, если вы уверены, что класс str будет существовать, иначе получите Error при попытке создать несуществующий класс.
Ответить