最终改进版，重构完成