Abstract class, which allow implementation instantiation with static factory method.