轉換插座之適配器模式

這個模式應該算是除了單例模式之外最簡單的一個模式,沒有多餘的類,這個模式只有一個職責,就是轉換的你接口參數,歸一化接口調用函數,贊成參數格式。
說人話~
其實就是,將不一樣東西,加上同一個包裝。
而這個模式,咱們應該早熟悉了。
在命令模式的中,有這樣一段代碼:json

//封裝命令
var MoveUp = function(exer){
    this.exer = exer;
}
MoveUp.prototype.do = function(){
    this.exer.moveUP();
}
var MoveDown = function(exer){
    this.exer = exer;
}
MoveDown.prototype.do = function(){
    this.exer.moveDown();
}
var MoveLeft = function(exer){
    this.exer = exer;
}
MoveLeft.prototype.do = function(){
    this.exer.moveLeft();
}
var MoveRight = function(exer){
    this.exer = exer;
}

在不一樣的命令中,咱們使用類將本來接口不一致的命令適配爲同一個接口的函數。而適配器的精華就體如今這裏,要知道,他和代理模式同樣,只起到一箇中間層的做用,實質上並不會改變一個總體架構。 而咱們大費周章的將他列爲一個模式是頗有代理的。由於在實際開發當中,咱們一定會使用到一些第三方的API,有時候leader高瞻遠矚每每會使用多個相同功能的 不一樣提供商的 API(是否是傻啊~). 現實是,這些提供商的API要麼名字不同,要麼參數不統一,可是必需要用,那就可使用適配器模式來進行轉化。
好比一個調 "評論模塊" 的API
多說裏面是. DS.comment().
Disqus的是. DQ.commentary().
(上面是我意淫的接口)
首先,leader的要求是,一開始使用多說的評論。(鬼信啊,萬一之後你又用Disqus,那我還怎麼過年)
咱們這裏可使用適配器模式給本身留一條後路架構

var _disqus = {  //disqus評論插件
    comment(){
        disqus.commentary();
    }
}
var _DS = {  //多說評論插件
    comment(){
        DS.comment();
    }
}
var command = function(comment){
    comment.comment();
}
//使用多說的評論
command(_DS);

之後萬一leader不爽多說了,想換,你也是垂手可得的。函數

適配器模式之數據格式轉換

適配器模式不只能夠起到適配接口名的做用,它另外還有一個功能就是能統一不一樣格式的做用。
在某個接口中,使用的數據格式是這樣的。this

[{
    name:"sam",
    year:12,
    gender:"male"
}]

可是因爲後臺SB的不許守文檔,使用了這樣的格式。prototype

{
    sam: {
        year: 12,
        gender: "male"
    },
    ...
}

可是,你的js已經按照文檔的要求完成了任務標準,而此時,後臺已經把後臺接口寫好了,估計如今度假去了。沒辦法,只有改動了,如今有兩種選擇,一種是直接破壞你原來寫好的程序邏輯,還有一種是使用適配器模式直接改寫。
個人話,我會選擇,適!配!器!模!式!
咱們能夠自定義一個格式轉化類插件

var json = {
    sam: {
        year: 12,
        gender: "male"
    },
    jimmy:{
        year:22,
        gender:"female"
    }
}
function adaption(para){
    var keys = Object.keys(para),
        obj = [];
    for(var i = 0,temp,key; key = keys[i++];){
        temp = para[key];
        temp.name = key;
        obj.push(temp);
    }
    return obj;
}
console.log(adaption(json));

而後在參數傳遞過程當中,直接使用adaption之後的數據就能夠了。設計

大話適配器模式

因爲適配器是做爲彌補的一種手段,而不是做爲一開始代碼設計的原則,因此,你們在代碼構思的時候儘可能將接口實現統一這纔是最棒的模式。 咱們的目的就是在程序中,不要出現適配器模式,但考慮到實際,這也是不可能的,因此儘可能將代碼設計符合規範是很是必要的。
ending~代理

相關文章
相關標籤/搜索