适配器模式为多个不兼容接口之间提供“转化器”。
它的实现非常简单,检查接口的数据, 进行过滤、重组等操作,使另一接口可以使用数据即可。
当数据不符合使用规则,就可以借助此种模式进行格式转化。
假设编写了不同平台的音乐爬虫,破解音乐数据。而对外向用户暴露的数据应该是具有一致性。
下面,adapter
函数的作用就是转化数据格式。
事实上,在我开发的音乐爬虫库--music-api-next就采用了下面的处理方法。
因为,网易、QQ、虾米等平台的音乐数据不同,需要处理成一致的数据返回给用户,方便用户调用。
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()));
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 resultif __name__ == '__main__':print(adapter(qq_music_info()))print(adapter(netease_music_info()))