class Battle extends SceneBase { /*...*/ }
class MapBase extends SceneBase { /*...*/ }
class World extends MapBase { /*...*/ }
class TownBase extends MapBase { /*...*/ }
class TownFactory extends SceneFactoryBase { /*...*/ } // 街は多そうなので…

class SceneFactory extends SceneFactoryBase
{
TownBase town[];

CreateScene(SCENE e, SceneControl lp) {
switch (e) {
case SCENE_WORLD : return new World(lp);
case SCENE_BATTLE : return new Battle(lp);
default : if ((SCENE_TOWN.first() <= e) && (e <= SCENE_TOWN.end())){
return new TownFactory(e);
}
}
}
}

なんか、すごい間違いがあると思うけど、考え方はこんな感じで…。