Вы хотите, чтобы какой-то шаблон проектирования фабрики выбирал соответствующий класс на основе входной строки. Хорошим примером этого является Registry, где применимые классы «регистрируют» себя с помощью одноэлементного класса Registry, подходящего для определенной входной строки; Сама фабрика становится поиском строки в зарегистрированном классе. Некоторый запасной вариант должен присутствовать, когда ни один класс не зарегистрирован для запрашиваемой входной строки: либо это исключение, либо есть реализация «по умолчанию», которая используется, когда не применяется более конкретная - последняя является хорошей опцией fail-soft , но не всегда применимо.
Неизбежная проблема с Registry заключается в том, как найти все интересующие классы и убедиться, что они регистрируются самостоятельно (это особенно интересно для классов плагинов); лучшие решения этой проблемы скорее зависят от конкретного языка под рукой, и, к сожалению, я не уверен, что AS3 обеспечивает в этом отношении (или если вы вообще заинтересованы в такой динамической расширяемости).
Другая интересная проблема с Registry - это «конфликты» - что происходит, если более чем один применимый класс заявляет, что он является правильным для определенной входной строки. «Последний претендует на победу» является самым простым, но часто слишком простым; у вас может быть каждый регистр классов для нескольких входных строк с определенным «приоритетом» или «приоритетом», или же (не очень интересный в системах, которые не распределены, но крайне важны для распределенных систем ...) «баланс нагрузки» среди всех применимые «серверы» (циклический перебор или более изощренные способы).
Вы заметите, что эти решения больше похожи на ваше второе, чем на первое, но ключевое отличие состоит в том, что вместо хрупкого, жесткого и жестко запрограммированного переключателя (OOP bete noire ;-) они полагаются на гибкие отображения из строка в класс (или метод конструирования класса, делегат и т. д., в зависимости от деталей языка реализации - например, в Java у вас может быть интерфейс StrategyConstructing, каждый класс стратегии будет затем регистрировать свой собственный вспомогательный класс, реализующий эту стратегию, когда он зарегистрируется до Реестр).