前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式 - 适配器模式 - JavaScript

设计模式 - 适配器模式 - JavaScript

作者头像
心谭博客
发布2020-04-20 16:52:34
3210
发布2020-04-20 16:52:34
举报
文章被收录于专栏:YuanXinYuanXin

适配器模式:为多个不兼容接口之间提供“转化器”。

专注前端与算法的系列干货分享,转载请声明出处:原文链接: xxoo521.com

什么是适配器模式?

适配器模式:为多个不兼容接口之间提供“转化器”。

它的实现非常简单,检查接口的数据,进行过滤、重组等操作,使另一接口可以使用数据即可。

应用场景

当数据不符合使用规则,就可以借助此种模式进行格式转化。

多语言实现

假设编写了不同平台的音乐爬虫,破解音乐数据。而对外向用户暴露的数据应该是具有一致性。

下面,adapter函数的作用就是转化数据格式。

事实上,在我开发的音乐爬虫库music-api-next就采用了下面的处理方法。

因为,网易、QQ、虾米等平台的音乐数据不同,需要处理成一致的数据返回给用户,方便用户调用。

ES6 实现

代码语言:javascript
复制
const API = {
    qq: () => ({
        n: "菊花台",
        a: "周杰伦",
        f: 1
    }),
    netease: () => ({
        name: "菊花台",
        author: "周杰伦",
        f: false
    })
};

const adapter = (info = {}) => ({
    name: info.name || info.n,
    author: info.author || info.a,
    free: !!info.f
});

/*************测试函数***************/

console.log(adapter(API.qq()));
console.log(adapter(API.netease()));

python 实现

代码语言:javascript
复制
def qq_music_info():
    return {
        'n': "菊花台",
        'a': "周杰伦",
        'f': 1
    }


def netease_music_info():
    return {
        'name': "菊花台",
        'author': "周杰伦",
        'f': False
    }


def adapter(info):
    result = {}
    result['name'] = info["name"] if 'name' in info else info['n']
    result['author'] = info['author'] if 'author' in info else info['a']
    result['free'] = not not info["f"]
    return result


if __name__ == '__main__':
    print(adapter(qq_music_info()))
    print(adapter(netease_music_info()))

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是适配器模式?
  • 应用场景
  • 多语言实现
    • ES6 实现
      • python 实现
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档