重构，加入策略模式