implemented basic abstract application factory