1. 什么是适配器模式?
适配器模式为多个不兼容接口之间提供“转化器”。
它的实现非常简单,检查接口的数据,
进行过滤、重组等操作,使另一接口可以使用数据即可。
2. 应用场景
当数据不符合使用规则,就可以借助此种模式进行格式转化。
3. 多语言实现
假设编写了不同平台的音乐爬虫,破解音乐数据。而对外向用户暴露的数据应该是具有一致性。
下面,adapter
函数的作用就是转化数据格式。
因为,网易、QQ、虾米等平台的音乐数据不同,需要处理成一致的数据返回给用户,方便用户调用。
3.1 ES6 实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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()))
|
3.2 python 实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| 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()))
|