文章目录加载中
设计模式手册之适配器模式
适配器模式:为多个不兼容接口之间提供“转化器”。
# 什么是适配器模式?
适配器模式:为多个不兼容接口之间提供“转化器”。
它的实现非常简单,检查接口的数据,进行过滤、重组等操作,使另一接口可以使用数据即可。
# 应用场景
当数据不符合使用规则,就可以借助此种模式进行格式转化。
# 多语言实现
假设编写了不同平台的音乐爬虫,破解音乐数据。而对外向用户暴露的数据应该是具有一致性。
下面,adapter
函数的作用就是转化数据格式。
事实上,在我开发的音乐爬虫库--music-api-next就采用了下面的处理方法。
因为,网易、QQ、虾米等平台的音乐数据不同,需要处理成一致的数据返回给用户,方便用户调用。
# ES6 实现
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 实现
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()))
本文来自心谭博客:xin-tan.com,经常更新web和算法的文章笔记,前往github查看目录归纳:github.com/dongyuanxin/blog