重构完成，测试基本没问题，还需要修正一些细节并加上JAVADOC