1. refactoring
2. caching presenter instance in PresenterFactory