重构了代码，可运行