on the way of Factory Method