重构后最终代码