概念
??適配器模式的作用是解決兩個軟件實體間的接口不兼容的問題浓恶。使用適配器模式之后固以,原本由于接口不兼容而不能工作的兩個軟件實體可以一起工作掂僵。
描述
??在程序開發(fā)中有許多這樣的場景:當試圖調用模塊或者對象的某個接口時稿辙,卻發(fā)現(xiàn)這個接口的格式并不符合目前的需求昆码。這時候有兩種解決辦法,第一種是修改原來的接口實現(xiàn)邻储,但如果原來的模塊很復雜赋咽,或者拿到的模塊是一段別人編寫的經過壓縮的代碼,修改原接口就顯得不太現(xiàn)實了吨娜。第二種辦法是創(chuàng)建一個適配器脓匿,將原接口轉換為客戶希望的另一個接口,客戶只需要和適配器打交道萌壳。
??如果現(xiàn)有的接口已經能夠正常工作,那就無需適配器模式日月。適配器模式是一種“亡羊補牢”的模式袱瓮,沒有人會在程序的設計之初就使用它。
??適配器在生活中的應用非常廣泛爱咬,我國的生活居民區(qū)交流電壓是220V尺借,日本和韓國的交流電壓大多是100V,而英國和澳大利亞的是240V精拟。筆記本電腦的電源適配器就承擔了轉換電壓的作用燎斩,電源適配器使筆記本電腦在100V~240V的電壓之內都能正常工作虱歪,這也是它為什么被稱為電源“適配器”的原因。
應用
??現(xiàn)在舉個實例栅表,向googleMap和baiduMap都發(fā)出“顯示”請求時笋鄙,googleMap和baiduMap分別以各自的方式在頁面中展現(xiàn)了地圖:
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方法,但實際開發(fā)中第三方的接口方法并不在控制范圍之內怪瓶,假如baiduMap提供的顯示地圖的方法不叫show而叫display呢萧落?
??baiduMap這個對象來源于第三方,正常情況下都不應該去改動它洗贰。此時可以通過增加baiduMapAdapter來解決問題:
var googleMap = {
show: function(){
console.log( '開始渲染谷歌地圖' );
}
};
var baiduMap = {
display: function(){
console.log( '開始渲染百度地圖' );
}
};
var baiduMapAdapter = {
show: function(){
return baiduMap.display();
}
};
renderMap( googleMap ); // 輸出:開始渲染谷歌地圖
renderMap( baiduMapAdapter ); // 輸出:開始渲染百度地圖
小結
??適配器模式主要用來解決兩個已有接口之間不匹配的問題找岖,它不考慮這些接口是怎樣實現(xiàn)的,也不考慮它們將來可能會如何演化敛滋。適配器模式不需要改變已有的接口许布,就能夠使它們協(xié)同作用。
參考文獻
《JavaScript設計模式與開發(fā)實踐》