JavaScript設(shè)計模式適配器模式實例
前言:
適配器設(shè)計模式可以用生活中常用的筆記本電腦來做例子,筆記本使用電壓在20v左右,但是我們家用電壓在220v左右,所以我們希望用家用電適配對應(yīng)的筆記本電壓,這個時候就需要使用電源適配器
我們可以用我們剛剛說的筆記本電腦來舉例子,這是家用電,家用電電壓為220V,所以我們返回一下電壓數(shù)
//?家用電 ????????class?Power{ ????????????charge(){ ????????????????return?'220V'; ????????????} ????????}
筆記本電源適配器,我們創(chuàng)建一個家用電實例,在通過方法對電壓進行轉(zhuǎn)換為筆記本可充電的電壓
class?Adaptor{ ????????????constructor(){ ????????????????this.power=?new?Power(); ????????????} ????????????charge(){ ????????????????//?先拿到家用電電壓 ????????????????let?voltage=this.power.charge; ????????????????//?返回一個轉(zhuǎn)換值 ????????????????return?`${voltage}=>20V` ????????????} ????????}
電腦,我們創(chuàng)建一個電腦適配器實例,然后電腦適配器實例的電壓轉(zhuǎn)換方法對電壓進行轉(zhuǎn)換充電
class?Computer{ ????????constructor(){ ????????????this.adaptor=new?Adaptor() ????????} ????????//?電腦充電 ????????use(){ ????????????console.log(this.adaptor.charge()); ????????} ????}
使用:
const cop=new Computer(); //充電 cop.use();
在工作中我們需要使用到多個功能,比如我們項目中使用到了百度地圖數(shù)據(jù)接口和高德地圖數(shù)據(jù)接口,這個時候我們就可以去使用適配器模式
//對百度地圖的數(shù)據(jù)接口操作 const?BaiduMap={ ???????????show(){ ??????????????//獲取百度地圖數(shù)據(jù) ???????????} ???????} //對高德地圖的數(shù)據(jù)接口操作 ???????const?GaodeiMap={ ???????????show(){ ???????????//獲取高德地圖數(shù)據(jù) ???????????} ???????} //對騰訊地圖的數(shù)據(jù)接口操作 ???????const?TxMap={ ???????????init(){ ???????????//獲取騰訊地圖數(shù)據(jù) ???????????} ???????}
由于他們都有共同點,所以請求數(shù)據(jù)都為show方法,如果有一天使用到其他的地圖請求數(shù)據(jù)為init的API接口,我們?nèi)バ薷墨@取數(shù)據(jù)的方法的話成本太高,這個時候就需要使用到了適配器設(shè)計模式,通過switch語句進行匹配方法名,進行調(diào)用
//接收倆個參數(shù),第一個是地圖模塊名,第二個是調(diào)用方法 function?Adapter(V,?fnName)?{ ????????????switch?(fnName)?{ ????????????????case?'show': ????????????????????V.show() ????????????????????break; ????????????????case?'init': ????????????????????V.init() ????????????????????break; ????????????} ????????}
適配器設(shè)計模式可以讓彼此不兼容的功能在一塊工作,有助于避免大規(guī)模的修改代碼,并且易于擴展和兼容,但是如果過多的使用適配器,就會使得代碼復(fù)雜程度增加,看起來十分混亂,維護起來有一定的困難
到此這篇關(guān)于JavaScript設(shè)計模式適配器模式實例的文章就介紹到這了,更多相關(guān)JavaScript 適配器模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS循環(huán)中正確使用async、await的姿勢分享
async?/?await是ES7的重要特性之一,也是目前社區(qū)里公認的優(yōu)秀異步解決方案,下面這篇文章主要給大家介紹了關(guān)于JS循環(huán)中正確使用async、await的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2021-12-12JS實現(xiàn)無限級網(wǎng)頁折疊菜單(類似樹形菜單)效果代碼
這篇文章主要介紹了JS實現(xiàn)無限級網(wǎng)頁折疊菜單(類似樹形菜單)效果代碼,涉及JavaScript基于鼠標(biāo)事件實現(xiàn)針對頁面元素結(jié)點的遍歷及樣式操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09JavaScript中實現(xiàn)sprintf、printf函數(shù)
這篇文章主要介紹了JavaScript中實現(xiàn)sprintf、printf函數(shù),這兩個函數(shù)在大多數(shù)編程語言中都有,但JS中卻沒有,本文介紹在js中實現(xiàn)這兩個函數(shù)功能,需要的朋友可以參考下2015-01-01