实际开发项目中经常需要对返回的标准数据进行一些修改。比如手机号前面统一加上+86,或者地址前面统一加上“中国/XX市/XX县”,工号前统一添加0000等等。我们可以在返回数据的函数中修改结果,但是如果后期需求变动,不需要添加额外字符了,或者变成了其他形式。这样改来改去是互联网公司中非常普遍的现象,利用装饰器模式可以在不修改标准获取数据接口的前提下进行封装
定义
// 标准的获取数据的方法
func GetVersionList(ctx *context.Context, platform int) ([]dto.VersionListData, error) {
/**
vl, err := ... 业务逻辑 ...
*/
return vl, err
}
// 定义装饰器方法的参数和返回值类型。(ctx *context.Context, platform int) ([]dto.VersionListData, error)是原函数GetVersionList的签名
type GetVersionListFunc func(ctx *context.Context, platform int) ([]dto.VersionListData, error)
// 更新时间前面添加“更新时间”
// DecorateGetVersionList 装饰结果
func DecorateGetVersionList(fn GetVersionListFunc) GetVersionListFunc {
return func(ctx *context.Context, platform int) ([]dto.VersionListData, error) {
list, err := fn(ctx, platform)
if err != nil {
return list, err
}
for k, _ := range list {
list[k].PublicDate = "更新时间: " + list[k].PublicDate
}
return list, nil
}
}
调用
versionList, err := logic.DecorateGetVersionList(logic.GetVersionList)(ctx, platform)
评论区