《JavaScript設計模式與開發實踐》模式篇(14)—— 適配器模式

適配器模式的做用是解決兩個軟件實體間的接口不兼容的問題。使用適配器模式以後,本來 因爲接口不兼容而不能工做的兩個軟件實體能夠一塊兒工做。 適配器的別名是包裝器(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 ); // 輸出:開始渲染百度地圖
複製代碼

總結

  • 適配器模式主要用來解決兩個已有接口之間不匹配的問題,它不考慮這些接口是怎樣實 現的,也不考慮它們未來可能會如何演化。適配器模式不須要改變已有的接口,就可以 使它們協同做用。
  • 裝飾者模式和代理模式也不會改變原有對象的接口,但裝飾者模式的做用是爲了給對象 增長功能。裝飾者模式經常造成一條長的裝飾鏈,而適配器模式一般只包裝一次。代理 模式是爲了控制對對象的訪問,一般也只包裝一次。
  • 外觀模式的做用卻是和適配器比較類似,有人把外觀模式當作一組對象的適配器,但外 觀模式最顯著的特色是定義了一個新的接口。

系列文章:

《JavaScript設計模式與開發實踐》最全知識點彙總大全ui

相關文章
相關標籤/搜索