亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript設(shè)計模式學(xué)習(xí)之適配器模式

 更新時間:2021年04月26日 08:52:14   作者:有夢想的咸魚前端  
這篇文章主要介紹了JavaScript設(shè)計模式之適配器模式,對設(shè)計模式不熟悉的同學(xué),可以參考學(xué)習(xí)一下

概述

適配器模式是設(shè)計模式行為型模式中的一種模式;

定義:

適配器用來解決兩個已有接口之間不匹配的問題,它并不需要考慮接口是如何實現(xiàn),也不用考慮將來該如何修改;適配器不需要修改已有接口,就可以使他們協(xié)同工作;

白話解釋:

你買了某種電器產(chǎn)品,準備帶回家好好感受該款產(chǎn)品的魅力;結(jié)果帶回家之后準備通電使用的時候,發(fā)現(xiàn)該產(chǎn)品僅支持兩孔插座,而你家里的電源插座都是三孔插座;這個時候你總不能又跑去電器專賣店退貨吧;突然靈機一動,你想起來了家里還有多功能電源插座,而多功能電源插座恰好就是三孔,于是你拿出你的多功能電源插座插上電源插座,再拿你電器產(chǎn)品的電源插座插在多功能插座上面的兩孔插座上,開始享受美滋滋的生活;這里的多功能插座就是一個適配器;

代碼實現(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 ); // 開始渲染百度地圖

當然上面的代碼是能夠正常運行的,這得益于這兩個對象中的參數(shù)名都是一樣的,所以才能夠正常的運行和顯示;

var googleMap = {
    show: function(){
        console.log( '開始渲染谷歌地圖' );
    }
};
var baiduMap = {
    display: function(){
        console.log( '開始渲染百度地圖' );
    }
};

突然有一天如果baiduMap的方法名改變了呢?那么我們再跟上面一樣運行肯定是會報錯的,因為baiduMap對象中已經(jīng)沒有了show()這個方法了;

使用適配器模式來修改:

var googleMap = {
    show: function(){
        console.log( '開始渲染谷歌地圖' );
    }
};
var baiduMap = {
    display: function(){
        console.log( '開始渲染百度地圖' );
    }
};
var baiduMapAdapter = {
    show: function(){
        return baiduMap.display();

    }
};

renderMap( googleMap ); // 開始渲染谷歌地圖
renderMap( baiduMapAdapter ); // 開始渲染百度地圖

在這段代碼中適配器做的事情其實很簡單,就是創(chuàng)建了一個對象,添加了一個同名的show()方法,然后在適配器里面調(diào)用了baiduMap.display()方法,這樣我們只需要在調(diào)用baiduMap的時候調(diào)用我們的適配器即可達到預(yù)期效果;

我們作為前端開發(fā)人員,對頁面上期待得到的數(shù)據(jù)和數(shù)據(jù)格式肯定是比較了解的,但是在前后端分離的開發(fā)模式中有的時候會遇到這種尷尬的處境:

我們都知道很多UI組件或者工具庫會按指定的數(shù)據(jù)格式進行渲染,但是這個時候后端是不知道的;所以可能接口出來的數(shù)據(jù)我們是不能直接正常的在頁面上渲染的,而此時老板催促我們趕緊上線,而后端堅持認為數(shù)據(jù)格式?jīng)]問題,堅決不修改;這個時候我們可以通過適配器模式來前端格式化數(shù)據(jù);

后端返回的json數(shù)據(jù)格式:

[
  {
    "day": "周一",
    "uv": 6300
  },
  {
    "day": "周二",
    "uv": 7100
  },  {
    "day": "周三",
    "uv": 4300
  },  {
    "day": "周四",
    "uv": 3300
  },  {
    "day": "周五",
    "uv": 8300
  },  {
    "day": "周六",
    "uv": 9300
  }, {
    "day": "周日",
    "uv": 11300
  }
]

Echarts圖表圖形需要的數(shù)據(jù)格式:

["周二", "周二", "周三", "周四", "周五", "周六", "周日"] //x軸的數(shù)據(jù)

[6300. 7100, 4300, 3300, 8300, 9300, 11300] //坐標點的數(shù)據(jù)

雖然心里苦,但還是要解決問題!使用適配器來解決:

//x軸適配器
function echartXAxisAdapter(res) {
  return res.map(item => item.day);
}

//坐標點適配器
function echartDataAdapter(res) {
  return res.map(item => item.uv);
}

創(chuàng)建兩個函數(shù)分別對數(shù)據(jù)按照echarts所需要的數(shù)據(jù)格式進行格式化處理即可解決問題;這兩個方法其實就是一個適配器,把指定的數(shù)據(jù)丟進去即可按照指定規(guī)則輸出我們期待得到的數(shù)據(jù)格式;

總結(jié)

個人認為適配器模式其實是一種亡羊補牢式的設(shè)計模式,如果在項目開發(fā)的開始階段我們就知道我們期待的數(shù)據(jù)格式或者方法名等,我們就可能永遠都用不到適配器模式;但是項目的迭代往往是不可預(yù)期的,當項目迭代之后數(shù)據(jù)格式或者方法名發(fā)生變化之后,我們通??梢允褂眠m配器模式來進行適配解決;當然了,最好的解決辦法就是項目開發(fā)過程中前后端協(xié)商討論數(shù)據(jù)格式、文件名等代碼規(guī)范,這樣是對項目的開發(fā)效率是會有很大的提升的;

以上就是JavaScript設(shè)計模式學(xué)習(xí)之適配器模式的詳細內(nèi)容,更多關(guān)于JavaScript設(shè)計模式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 調(diào)用jQuery滑出效果時閃爍的解決方法

    調(diào)用jQuery滑出效果時閃爍的解決方法

    這篇文章主要介紹了在調(diào)用jQuery 滑出效果時,層會現(xiàn)次閃爍一下的解決方法,需要的朋友可以參考下
    2014-03-03
  • JavaScript常考手寫題之柯里化與數(shù)組扁平化的實現(xiàn)

    JavaScript常考手寫題之柯里化與數(shù)組扁平化的實現(xiàn)

    這篇文章主要為大家詳細介紹了JavaScript??际謱戭}中柯里化與數(shù)組扁平化、數(shù)組去重的實現(xiàn),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • javascript實現(xiàn)全角轉(zhuǎn)半角的方法

    javascript實現(xiàn)全角轉(zhuǎn)半角的方法

    這篇文章主要介紹了javascript實現(xiàn)全角轉(zhuǎn)半角的方法,涉及JavaScript字符串遍歷與編碼轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • javascript實現(xiàn)倒計時并彈窗提示特效

    javascript實現(xiàn)倒計時并彈窗提示特效

    倒計時的功能在我們做項目的時候會經(jīng)常遇到,這里給大家分享的是個人編寫的一個簡易的效果代碼,有需要的小伙伴可以參考下
    2015-06-06
  • js針對圖片加載失敗的處理方法分析

    js針對圖片加載失敗的處理方法分析

    這篇文章主要介紹了js針對圖片加載失敗的處理方法,結(jié)合實例形式分析了js針對圖片加載失敗時的事件監(jiān)聽、響應(yīng)等相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • JavaScript 處理Iframe自適應(yīng)高度(同或不同域名下)

    JavaScript 處理Iframe自適應(yīng)高度(同或不同域名下)

    Iframe自適應(yīng)高度一直都備受關(guān)注,接下來為大家介紹下同域名下Iframe自適應(yīng)高度的處理以及跨域時Iframe高度自適應(yīng),感興趣的朋友可以參考下哈
    2013-03-03
  • 原生js封裝自定義滾動條

    原生js封裝自定義滾動條

    本文主要介紹了原生js封裝自定義滾動條的相關(guān)知識。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • 利用javascript實現(xiàn)的三種圖片放大鏡效果實例(附源碼)

    利用javascript實現(xiàn)的三種圖片放大鏡效果實例(附源碼)

    這篇文章主要介紹了利用javascript實現(xiàn)的幾種放大鏡效果,很實用一款漂亮的js圖片放大鏡特效,常見于電商網(wǎng)站上產(chǎn)品頁,用來放大展示圖片細節(jié),很有實用性,推薦下載學(xué)習(xí)研究。文中提供了完整的源碼供大家下載,需要的朋友可以參考借鑒,一起來看看吧。
    2017-01-01
  • javascript事件冒泡詳解和捕獲、阻止方法

    javascript事件冒泡詳解和捕獲、阻止方法

    雖然精通jquery,但對它的原型javascript卻不是很了解,最近在學(xué)習(xí)javascript中遇到了一些困難,比如冒泡和捕獲,很多次被提到,但又不知究竟應(yīng)用在何處。找到了一些好文章解惑,在這里分享給大家
    2014-04-04
  • webpack自動引入打包資源HtmlWebpackPlugin的實現(xiàn)

    webpack自動引入打包資源HtmlWebpackPlugin的實現(xiàn)

    本文主要介紹了webpack自動引入打包資源HtmlWebpackPlugin的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07

最新評論