重构delegate