完成了三个类，细节需要再考虑，还未测试