摘要:下面是我仿照適配器模式改進(jìn)的谷歌地圖百度地圖適配器參數(shù)配置適配器地圖只關(guān)注發(fā)出顯示地圖而不關(guān)注具體用哪種地圖當(dāng)增加了搜搜地圖,我們需要添加搜搜地圖的方法以及修改適配器地圖參數(shù)而不需要對(duì)函數(shù)進(jìn)行修改搜搜地圖
不多說(shuō)先上一段代碼(轉(zhuǎn)載自《JavaScript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》)
//谷歌地圖show方法 var googleMap = { googlShow: function() { console.log("谷歌地圖"); } }; //百度地圖show方法 var baiduMap = { baiduShow: function() { console.log("百度地圖"); } }; //渲染地圖函數(shù) var renderMap=function(map){ if(map.show instanceof Function){ map.show(); } }; renderMap(googleMap);//輸出:開(kāi)始渲染谷歌地圖 renderMap(baiduMap);//輸出:開(kāi)始渲染百度地圖
對(duì)于書中拋出的問(wèn)題,假設(shè)每個(gè)地圖API提供展示地圖的方法名都是show,在實(shí)際開(kāi)發(fā)中也許不會(huì)如此順利,書中作者提出的思路是借助適配器模式來(lái)解決問(wèn)題。下面是我仿照適配器模式改進(jìn)的:
var googleMap = { googlShow: function() { console.log("谷歌地圖"); } }; var baiduMap = { baiduShow: function() { console.log("百度地圖"); } }; //適配器參數(shù)配置 var mapArg = { "googleMap": googleMap.googlShow, "baiduMap": baiduMap.baiduShow }; //適配器地圖 var adaptMap = { show: function(arg) { for (var imap in mapArg) { for (var fmap in arg) { if (imap && fmap && mapArg[imap].name==fmap) { return mapArg[imap](); } } } } }; //只關(guān)注發(fā)出顯示地圖而不關(guān)注具體用哪種地圖 var renderMap = function(arg) { adaptMap.show(arg); }; //當(dāng)增加了搜搜地圖,我們需要添加搜搜地圖的方法以及修改適配器地圖參數(shù) //而不需要對(duì)renderMap函數(shù)進(jìn)行修改 var sosoMap = { sosoShow: function() { console.log("搜搜地圖"); } }; mapArg.sosoMap=sosoMap.sosoShow; render(sosoMap);
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80946.html
摘要:為什么要學(xué)習(xí)設(shè)計(jì)模式做事情之前問(wèn)個(gè)為什么總是好的。設(shè)計(jì)模式的使用方法關(guān)于使用方式,像我這種初學(xué)者最容易犯的錯(cuò)誤就是生搬硬套,但是模仿本來(lái)也是學(xué)習(xí)的一個(gè)過(guò)程,最重要的事情是在模仿中要學(xué)會(huì)思考。 為什么要學(xué)習(xí)設(shè)計(jì)模式? 做事情之前問(wèn)個(gè)為什么總是好的。關(guān)于設(shè)計(jì)模式的好壞,我在知乎上也看過(guò)一些討論,有知友對(duì)其提出過(guò)一些疑問(wèn),里面有一些關(guān)于設(shè)計(jì)模式的觀點(diǎn): 設(shè)計(jì)模式有何不妥,所謂的荼毒體現(xiàn)在哪...
摘要:面向?qū)ο笤O(shè)計(jì)的五大原則單一職責(zé)原則接口隔離原則開(kāi)放封閉原則替換原則依賴倒置原則。主要是針對(duì)繼承的設(shè)計(jì)原則,繼承與派生多態(tài)是的主要特性。 面向?qū)ο笤O(shè)計(jì)的五大原則:?jiǎn)我宦氊?zé)原則、接口隔離原則、開(kāi)放-封閉原則、替換原則、依賴倒置原則。這些原則主要是由Robert C.Martin在《敏捷軟件開(kāi)發(fā)——原則、方法、與實(shí)踐》一書中總結(jié)出來(lái),這五大原則也是23種設(shè)計(jì)模式的基礎(chǔ)。 單一職責(zé)原則 Sin...
摘要:動(dòng)態(tài)類型語(yǔ)言和鴨子類型編程語(yǔ)言按照數(shù)據(jù)類型大體可分為靜態(tài)類型語(yǔ)言和動(dòng)態(tài)類型語(yǔ)言。鴨子類型的概念至關(guān)重要,比如一個(gè)對(duì)象有了屬性,也可以依照下標(biāo)來(lái)存取屬性,這個(gè)對(duì)象就可以被當(dāng)做數(shù)組來(lái)使用。 前言 曾經(jīng)對(duì)Javascript的面向?qū)ο笙嚓P(guān)知識(shí)也有過(guò)了解,從各種博客、書籍上也學(xué)到了很多。但是最近在看《Javascript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)戰(zhàn)》這本書時(shí)發(fā)現(xiàn)該書對(duì)這方面的知識(shí)點(diǎn)介紹的很易于理解,因此...
摘要:適配器模式舊接口格式和使用者不兼容的情況下需要加一個(gè)適配轉(zhuǎn)換接口,無(wú)需要改變舊的接口格式電源適配器實(shí)現(xiàn)步驟針對(duì)類創(chuàng)建一個(gè)轉(zhuǎn)換類類中的初始化中創(chuàng)建一個(gè)實(shí)例利用類的多態(tài)特性覆蓋類的方法代碼實(shí)現(xiàn)語(yǔ)法初始化實(shí)例覆蓋函數(shù)式覆蓋 showImg(https://segmentfault.com/img/remote/1460000019829430?w=640&h=413); 1. JavaScr...
摘要:推薦為什么我們選擇本文是工程師記述在前端技術(shù)選型時(shí)選用的考慮過(guò)程。能夠保證較好的類型覆蓋,但是其對(duì)于多態(tài)性的支持并不是很好,并且的社區(qū)也相對(duì)活躍。引擎就是為解決這一問(wèn)題而生,在中也是采用該引擎來(lái)解析。 推薦 1. 為什么我們選擇 TypeScript https://redditblog.com/2017/0... 本文是 Reddit 工程師 Niranjan Ramadas 記述在...
閱讀 2278·2023-04-25 23:15
閱讀 1943·2021-11-22 09:34
閱讀 1564·2021-11-15 11:39
閱讀 972·2021-11-15 11:37
閱讀 2166·2021-10-14 09:43
閱讀 3506·2021-09-27 13:59
閱讀 1517·2019-08-30 15:43
閱讀 3480·2019-08-30 15:43