適配器模式的做用是解決兩個軟件實體間的接口不兼容的問題。使用適配器模式以後,本來 因爲接口不兼容而不能工做的兩個軟件實體能夠一塊兒工做。 適配器的別名是包裝器(wrapper),這是一個相對簡單的模式。在程序開發中有許多這樣的 場景:當咱們試圖調用模塊或者對象的某個接口時,卻發現這個接口的格式並不符合目前的需求。 這時候有兩種解決辦法,第一種是修改原來的接口實現,但若是原來的模塊很複雜,或者咱們拿 到的模塊是一段別人編寫的通過壓縮的代碼,修改原接口就顯得不太現實了。第二種辦法是建立 一個適配器,將原接口轉換爲客戶但願的另外一個接口,客戶只須要和適配器打交道。設計模式
如今使用谷歌地圖和百度地圖在頁面展示地圖bash
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 ); // 輸出:開始渲染百度地圖
複製代碼
這段程序得以順利運行的關鍵是 googleMap 和 baiduMap 提供了一致的 show 方法,但第三方的 接口方法並不在咱們本身的控制範圍以內,假如 baiduMap 提供的顯示地圖的方法不叫 show 而叫 display 呢app
baiduMap 這個對象來源於第三方,正常狀況下咱們都不該該去改動它。此時咱們能夠經過增 加 baiduMapAdapter 來解決問題post
var googleMap = {
show: function(){
console.log( '開始渲染谷歌地圖' );
}
};
var baiduMap = {
display: function(){
console.log( '開始渲染百度地圖' );
}
};
var baiduMapAdapter = {
show: function(){
return baiduMap.display();
}
};
renderMap( googleMap ); // 輸出:開始渲染谷歌地圖
renderMap( baiduMapAdapter ); // 輸出:開始渲染百度地圖
複製代碼