Я делал похожую задачу, реализовал через конструктор в базовом классе. Все объекты были наследники от базового класса, соответственно перекрывались только необходимые методы. А в базовом классе был создан метод construct

Код AS3:
package code
{
import flash.display.Sprite;
import code.event.GameEvent;
import flash.events.Event;
import code.enemy.*;
import code.friend.*;
/**
* Игровой объект
* @author KingPeas
*/
public class GameObject extends Sprite
{
public function GameObject()
{
setCenterCoordinate();
addEventListener(Event.ADDED_TO_STAGE, hnAddedToStage);
cacheAsBitmap = true;
mouseEnabled = false;
this.initValue();
}
/**
* Создание нового игрового объекта
* @param property свойства объекта
* @param currentPos текущее смещение карты
* @return возвращается игровой объект
*/
static public function construct(property:XML, currentPos:int):GameObject {
var go:GameObject;
switch(uint(property.@t)) {
case 1:
go = new IronBlock();
break;
case 2:
go = new WoodBlock();
break;
case 3:
go = new EnemyShip();
break;
case 6:
go = new Bullet();
break;
case 7:
go = new Sputnik();
break;
case 8:
go = new Score();
break;
case 9:
go = new Mine();
break;
case 10:
go = new Life();
break;
default:
go = new GameObject();
}
go.initProperty(property);
go.x -= currentPos;
return go;
}
...
}
Вот как то так.
И соответственно чтобы получить объект мне нужно было только знать его тип определенный в xml. Передавая указание какой тип объекта надо создать я получал на выходе готовый объект столько раз сколько это было необходимо.