splits the constructor factory in three