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