ControllerFactory updated to use AbstractFactory