天天看點

設計模式 - 擴充卡模式 - JavaScript

擴充卡模式:為多個不相容接口之間提供“轉化器”。

專注前端與算法的系列幹貨分享,轉載請聲明出處:原文連結: xxoo521.com

什麼是擴充卡模式?

擴充卡模式:為多個不相容接口之間提供“轉化器”。

它的實作非常簡單,檢查接口的資料,進行過濾、重組等操作,使另一接口可以使用資料即可。

應用場景

當資料不符合使用規則,就可以借助此種模式進行格式轉化。

多語言實作

假設編寫了不同平台的音樂爬蟲,破解音樂資料。而對外向使用者暴露的資料應該是具有一緻性。

下面,

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()))           

複制