extracted strategy factory class