侧边栏壁纸
  • 累计撰写 38 篇文章
  • 累计创建 81 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

装饰器模式

小李同学
2024-02-29 / 0 评论 / 0 点赞 / 701 阅读 / 318 字 / 正在检测是否收录...

实际开发项目中经常需要对返回的标准数据进行一些修改。比如手机号前面统一加上+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)
0

评论区