package registry import ( "enterprise/common/model" "github.com/spf13/cast" ) var ( salaryFactory map[string]SalaryCalculatorFactory ) func init() { salaryFactory = make(map[string]SalaryCalculatorFactory) } type SalaryCalculator interface { Calculate(salary *model.StaffSalary) } type SalaryCalculatorFactory func(corp *model.Corp, user *model.StaffUser) SalaryCalculator func RegisterSalaryCalculator(name string, factory SalaryCalculatorFactory) { salaryFactory[name] = factory } func NewSalaryCalculator(corp *model.Corp, user *model.StaffUser) SalaryCalculator { factory := salaryFactory[cast.ToString(corp.Id)+"_"+user.Username] if factory == nil { factory = salaryFactory[cast.ToString(corp.Id)] } if factory == nil { return nil } return factory(corp, user) }