14 適配器模式
適配器模式的作用是解決兩個軟件實體間的接口不兼容的問題;
14.1 適配器模式實例
在之前的地圖的例子中咬最,使用多態(tài)的思想,實現(xiàn)同一個操作在不同的對象產(chǎn)生不同的結(jié)果欠动,如下代碼:
var googleMap = {
show: function(){ console.log( '開始渲染谷歌地圖' );}
};
var baiduMap = {
show: function(){ console.log( '開始渲染百度地圖' ); }
};
var renderMap = function( map ){
if ( map.show instanceof Function ){ map.show(); }
};
renderMap( googleMap ); // 輸出:開始渲染谷歌地圖
renderMap( baiduMap ); // 輸出:開始渲染百度地圖
上面代碼運行的關(guān)鍵在于 googleMap 和 baiduMap 提供了一致的 show
方法永乌,若第三方接口方法不在約定中(如不是 show
方法),那么需要增加一個適配函數(shù)來解決問題具伍,如下:
var googleMap = {
show: function(){ console.log( '開始渲染谷歌地圖' ); }
};
var baiduMap = {
display: function(){ console.log( '開始渲染百度地圖' ); }
};
var baiduMapAdapter = {
show: function(){ return baiduMap.display();}
};
renderMap( googleMap ); // 輸出:開始渲染谷歌地圖
renderMap( baiduMapAdapter ); // 輸出:開始渲染百度地圖
14.2 適配器模式小結(jié)
適配器模式是一對相對簡單的模式翅雏,在提到的設(shè)計模式中,有一些模式跟適配器模式的結(jié)構(gòu)非常相似人芽,比如裝飾者模式望几、代理模式和外觀模式。這幾種模式都屬于“包裝模式
”啼肩,都是由一個對象來包裝另一個對象橄妆,它們的關(guān)鍵區(qū)別是模式的意圖;
下面對這幾種 包裝模式
進行介紹:
- 適配器模式主要用來解決兩個已有接口之間不匹配的問題祈坠,它不考慮這些接口是怎樣實現(xiàn)的害碾,也不考慮它們將來可能會如何演化。適配器模式不需要改變已有的接口赦拘,就能夠使它們協(xié)同作用慌随。
- 裝飾者模式和代理模式也不會改變原有對象的接口,但裝飾者模式的作用是為了給對象增加功能。裝飾者模式常常形成一條長的裝飾鏈阁猜,而適配器模式通常只包裝一次丸逸。代理模式是為了控制對對象的訪問,通常也只包裝一次剃袍。
- 外觀模式的作用和適配器比較相似黄刚,可以把外觀模式看成一組對象的適配器,但外觀模式最顯著的特點是定義了一個新的接口民效。
系列鏈接
- JavaScript 設(shè)計模式(上)——基礎(chǔ)知識
- JavaScript 設(shè)計模式(中)——1.單例模式
- JavaScript 設(shè)計模式(中)——2.策略模式
- JavaScript 設(shè)計模式(中)——3.代理模式
- JavaScript 設(shè)計模式(中)——4.迭代器模式
- JavaScript 設(shè)計模式(中)——5.發(fā)布訂閱模式
- JavaScript 設(shè)計模式(中)——6.命令模式
- JavaScript 設(shè)計模式(中)——7.組合模式
- JavaScript 設(shè)計模式(中)——8.模板方法模式
- JavaScript 設(shè)計模式(中)——9.享元模式
- JavaScript 設(shè)計模式(中)——10.職責鏈模式
- JavaScript 設(shè)計模式(中)——11. 中介者模式
- JavaScript 設(shè)計模式(中)——12. 裝飾者模式
- JavaScript 設(shè)計模式(中)——13.狀態(tài)模式
- JavaScript 設(shè)計模式(中)——14.適配器模式
- JavaScript 設(shè)計模式(下)——設(shè)計原則
- JavaScript 設(shè)計模式練習代碼
本文主要參考了《JavaScript設(shè)計模式和開發(fā)實踐》一書