Design pattern : implement factory