An implementation example of the AbsractFactory Pattern