to enforce this style of creation, introduce a static factory method and hide the constructor as private.