亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

設計模式中的facade外觀模式在JavaScript開發中的運用

2019-11-20 10:01:00
字體:
來源:轉載
供稿:網友

概念

外觀模式(門面模式),是一種相對簡單而又無處不在的模式。外觀模式提供一個高層接口,這個接口使得客戶端或子系統更加方便調用。

外觀模式并不是適配器模式,適配器模式是一種包裝器,用來對接口進行適配以便在不兼容系統中使用它。而創建外觀元素則是圖個方便。它并不用于達到需要特定接口的客戶系統打交道這個目的,而是用于提供一個簡化的接口。

JavaScript代碼示例

用一段再簡單不過的代碼來表示

var getName = function(){ return ''svenzeng"}var getSex = function(){  return 'man'}

如果你需要分別調用getName和getSex函數. 那可以用一個更高層的接口getUserInfo來調用.

var getUserInfo = function(){ var info = a() + b(); return info;}

也許你會問為什么一開始不把getName和getSex的代碼寫到一起, 比如這樣

var getNameAndSex = function(){ return 'svenzeng" + "man";}

答案是顯而易見的,飯堂的炒菜師傅不會因為你預定了一份燒鴨和一份白菜就把這兩樣菜炒在一個鍋里。他更愿意給你提供一個燒鴨飯套餐。同樣在程序設計中,我們需要保證函數或者對象盡可能的處在一個合理粒度,畢竟不是每個人喜歡吃燒鴨的同時又剛好喜歡吃白菜。
外觀模式還有一個好處是可以對用戶隱藏真正的實現細節,用戶只關心最高層的接口。比如在燒鴨飯套餐的故事中,你并不關心師傅是先做燒鴨還是先炒白菜,你也不關心那只鴨子是在哪里成長的。
最后寫個我們都用過的外觀模式例子

var stopEvent = function( e ){  //同時阻止事件默認行為和冒泡 e.stopPropagation(); e.preventDefault();}

我知道外觀模式的概念很容易掌握,你都不一定需要一個JavaScript代碼的例子,但是總有些人更在乎代碼,會覺得那樣才更容易理解。更何況,沒有代碼示例的JavaScript文章根本就不具說服力,就應該從網上刪掉。 我們從一個簡單的事件監聽器的例子開始。大家都知道要添加一個事件監聽器并不是一件容易的事,除非只想讓代碼運行在少數幾個瀏覽器上。你不得不測試很多方法以確保針對不同瀏覽器的代碼都能正常運行。在這個代碼示例中我們只是把特性檢測添加到這個方法中:

function addEvent(element, type, func) {  if (window.addEventListener) {    element.addEventListener(type, func, false);  }  else if (window.attachEvent) {    element.attachEvent('on'+type, func);  }  else {    element['on'+type] = func;  }}

簡單吧!我真希望我可以不用寫那些不必要的代碼,讓它們越簡單越好,但是如果真是這樣就沒什么意思了,你也不會想讀下去了,對吧?所以我不這么認為,我想我要給你看點更復雜的東西。我只是想說,你的代碼原本看起來會有些像下面這樣:

var foo = document.getElementById('foo');  foo.style.color = 'red';  foo.style.width = '150px';var bar = document.getElementById('bar');  bar.style.color = 'red';  bar.style.width = '150px';var baz = document.getElementById('baz');  baz.style.color = 'red';  baz.style.width = '150px';

太蹩腳了!你對每個元素做了一模一樣的事!我認為我們可以讓它變得更簡單點:

function setStyle(elements, property, value) {  for (var i=0, length = elements.length; i < length; i++) {    document.getElementById(elements[i]).style[property] = value;  }}// 現在你可以這么寫:setStyle(['foo', 'bar', 'baz'], 'color', 'red');setStyle(['foo', 'bar', 'baz'], 'width', '150px');

是不是覺得咱們NB壞了?你快算了吧!咱們可是JavaScript程序員呀!能不能用點腦子,來點真格的。也許我們可以只調用一次就能設置所有的樣式。看下這個:

function setStyles(elements, styles) {  for (var i=0, length = elements.length; i < length; i++) {    var element = document.getElementById(elements[i]);    for (var property in styles) {      element.style[property] = styles[property];    }  }}//現在你只要這樣寫:setStyles(['foo', 'bar', 'baz'], {  color: 'red',  width: '150px'});

如果我們有很多元素想設置相同的樣式,那這段代碼真是為我們節省了不少時間。

外觀模式之利:
使用外觀模式的目的就是要讓程序員過的更輕松一些,編寫一次組合代碼,然后就可以反復使用它,這有助于節省時間和精力。給一些復雜的問題提供一個簡化接口。

外觀方法方便了開發人員,斌共提供過了比較高層的功能,降低對外部代碼的依賴程度,為應用系統的開發增加了一些額外的靈活性。通過使用外觀模式,可以避免與下層子系統緊密耦合。這樣就可以對這個系統進行修改而不會影響到客戶代碼。

外觀模式之弊:
有時候外觀元素也會帶來一些不必要的額外負擔。在實施一些套路之前應該認真掂量一下其實用性。有時相比一個龐雜的外觀函數,其組成函數在力度方面更有吸引力。這是因為外觀函數可能常常會執行一些你并不需要的任務。

對于簡單的個人網站或少量營銷網頁來說,僅為工具提示和彈出式窗口這樣一點增強行為就導入這個Javascript庫可能并不明智。此時考慮只使用少許簡單的外觀元素而不是一個滿是這類東西的庫。

外觀函數為執行各種復雜任務提供了一個簡單的接口,它們使代碼更容易維護和理解。它們還能弱化子系統和客戶代碼的耦合。把經常相伴出現的常用函數組合在一起。這個模式在DOM腳本編程這種需要面對葛洪不一致的瀏覽器接口的環境中很常用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国内精品久久久久久| 国产精品视频一| 91精品免费久久久久久久久| 国产精品一区二区性色av| 97国产精品免费视频| 欧美裸体男粗大视频在线观看| 久久成人亚洲精品| 久久精品国产91精品亚洲| 岛国av一区二区在线在线观看| 国产亚洲激情视频在线| 亚洲欧洲日本专区| 久久国产精彩视频| 欧美日韩国产一区二区| 岛国精品视频在线播放| 久久久999国产| 国产精品久久久久久一区二区| 美女黄色丝袜一区| 亚洲欧洲一区二区三区在线观看| 日韩av在线资源| 一本大道久久加勒比香蕉| 精品亚洲一区二区| 日韩中文字幕视频在线观看| 成人午夜两性视频| 精品国产电影一区| 国产一区二区三区视频免费| 日韩av在线播放资源| 57pao国产精品一区| 国产精品福利网站| 国产精品极品美女在线观看免费| 亚洲日本欧美中文幕| 在线看日韩欧美| 国产aⅴ夜夜欢一区二区三区| 亚洲一二在线观看| 久久久av电影| 日韩日本欧美亚洲| 成人女保姆的销魂服务| 日韩在线一区二区三区免费视频| 久久久久久网址| www.日韩视频| 国产又爽又黄的激情精品视频| 精品国产视频在线| 欧美激情第1页| 91成人福利在线| 精品视频在线播放| 亚洲欧洲偷拍精品| 日韩av在线免费看| 欧美一级片免费在线| 亚洲网站视频福利| 国产一级揄自揄精品视频| 久久久久久久成人| 欧美激情久久久久| 黑人精品xxx一区一二区| 亚洲精品在线不卡| 久久久国产一区| 日韩av在线不卡| www.日韩不卡电影av| 国产成人综合一区二区三区| 亚洲电影成人av99爱色| 欧美性一区二区三区| 91情侣偷在线精品国产| 色综合久久天天综线观看| 成人激情视频在线| 日韩风俗一区 二区| 精品成人69xx.xyz| 日韩av手机在线看| 欧美国产精品人人做人人爱| 国语自产精品视频在线看| 这里只有精品在线观看| 午夜剧场成人观在线视频免费观看| 日韩美女免费观看| 久久国产精品视频| 精品国产一区二区三区在线观看| 最近中文字幕2019免费| 日韩中文字幕在线| 久久久99免费视频| 久久精视频免费在线久久完整在线看| 一个人www欧美| 日本欧美一级片| 日韩av一区二区在线观看| 成人www视频在线观看| 亚洲天堂av高清| 欧美激情精品久久久久久变态| 韩国日本不卡在线| 国产亚洲精品久久久久久| 最近2019中文字幕mv免费看| 久久精品视频中文字幕| 国产精品久久久久久久久久久新郎| 亚洲福利小视频| 国产精品露脸av在线| 久操成人在线视频| 亚洲尤物视频网| 国产有码在线一区二区视频| 中文字幕亚洲一区二区三区五十路| 欧美大人香蕉在线| 亚洲一二在线观看| 日韩欧美高清视频| 91产国在线观看动作片喷水| 亚洲欧美日韩另类| 亚洲高清在线观看| 亚洲的天堂在线中文字幕| 欧美精品成人91久久久久久久| 国产精品jvid在线观看蜜臀| 日韩av在线不卡| 麻豆乱码国产一区二区三区| 日韩av免费在线观看| 国产精品极品尤物在线观看| 91香蕉电影院| 欧美日韩国产va另类| 亚洲精品美女在线观看播放| 欧美劲爆第一页| yw.139尤物在线精品视频| 日韩视频免费在线观看| 26uuu日韩精品一区二区| 成人免费自拍视频| 日韩高清有码在线| 国产精品久久久久久久久免费| 狠狠色狠狠色综合日日小说| 国产亚洲在线播放| 91av视频在线免费观看| 精品久久在线播放| 亚洲天堂视频在线观看| 2019av中文字幕| 国产精品视频男人的天堂| 国产日韩在线看片| 国产精品h片在线播放| 亚洲国产精品久久久久秋霞蜜臀| 国产91精品久久久久| 国产精品网站入口| 成人黄色av网站| 91久久久久久久久久久久久| 日韩成人激情视频| 欧美自拍视频在线| 97激碰免费视频| 久久精品久久久久电影| 久久久国产成人精品| 国产精品91免费在线| 久久久免费在线观看| 国产欧美精品日韩精品| 欧美黄色免费网站| 亚洲欧美日韩精品| 日韩久久精品电影| 国产一区二区欧美日韩| 韩日精品中文字幕| 中文字幕一区二区三区电影| 91免费电影网站| 国产精品亚洲片夜色在线| 国产丝袜精品第一页| 久久精品国产久精国产一老狼| 欧美日韩国产黄| 亚洲久久久久久久久久| 亚洲一区亚洲二区亚洲三区| 亚洲v日韩v综合v精品v| 国产精品黄色av| 国产盗摄xxxx视频xxx69| 亚洲精品视频免费在线观看| 欧美色视频日本高清在线观看| 九九精品视频在线观看| 亚洲xxxxx| 国产精品极品在线| www日韩欧美| 中文字幕日韩欧美精品在线观看| 国产不卡视频在线| 日本不卡免费高清视频| 亚洲新声在线观看|