factory重构