[TOC]
# 適配器模式
將原接口轉換為客戶希望的另一個接口,客戶只需要和適配器打交道
## 適配器模式的應用
當百度地圖和google地圖提供的接口一致時
```javascript
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);
```
這時可以完美的運行著,但是當百度地圖的接口發生改變時
```javascript
var googleMap = {
show: function(){
console.log('開始渲染地圖');
}
};
var baiduMap = {
display: function(){
console.log('開始渲染地圖');
}
};
var baiduAdapter = { // 增加 baiduAdapter 來解決問題
show: function(){
return baiduMap.display();
}
}
var renderMap = function(map){
if(map.show instanceof Function){
map.show();
}
};
renderMap(googleMap);
renderMap(baiduAdapter);
```
適配器模式的結構和裝飾者模式、代理模式、外觀模式都比較像,都屬于“包裝模式”,都是由一個對象來包裝另一個對象。
- 適配器模式主要用來解決兩個已有接口之間不太匹配的問題,它不考慮這些接口是怎樣實現的,也不考慮它們將來可能會如何演化。適配器模式不需要改變已有的接口,就能使它們協同作用。
- 裝飾者模式和代理模式不會改變原有對象的接口,但裝飾者模式的作用是為了給對象增加功能。裝飾者模式常常形成一條長的裝飾鏈,而適配模式通常只包裝一次。代理模式是為了控制對象的訪問,通常也只包裝一次。
- 外觀模式的作用倒是和適配器比較相似,有人把外觀模式看成一組對象的適配器,但外觀模式最顯著的特點是定義了一個新的接口。