it is not really necessary to use abstract factories