1)делаешь иерархию классов. в Run() пишешь
PHP код:
...
doMyJob();
...
метод doMyJob() - proteced, реализован в наследниках. Можно и run() перекрывать, но это не есть хорошо - наверняка найдется общий код.
2) в main() пишешь
PHP код:
MyClass holder;
;
holder = MyClass::construct(????);
...
это так называемый ФАБРИЧНЫЙ МЕТОД, который знает как создавать правильных наследников в зависимости от параметра(читай GOF)
3) остается определится с тем , что будет параметром. Посмотри как работает иерархия классов разноски заказов как пример.