重构代码和 demo