亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

JavaScript設(shè)計(jì)模式之門面模式原理與實(shí)現(xiàn)方法分析

瀏覽:79日期:2023-11-08 13:33:22

本文實(shí)例講述了JavaScript設(shè)計(jì)模式之門面模式原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)系統(tǒng)的一個(gè)門面對象進(jìn)行,這就是門面模式。

門面模式具備如下兩個(gè)角色:

1. 門面角色

客戶端可以調(diào)用這個(gè)角色方法,此角色中有子系統(tǒng)的應(yīng)用(知曉相關(guān)的(一個(gè)或多個(gè))子系統(tǒng)的功能和責(zé)任)。本角色會(huì)將所有從客戶端發(fā)來的請求委派到相應(yīng)的子系統(tǒng)去。

2. 子系統(tǒng)角色

可以同時(shí)有一個(gè)或多個(gè)子系統(tǒng)。每一個(gè)子系統(tǒng)都不是一個(gè)單獨(dú)的類,而是一些類的集合。每一個(gè)子系統(tǒng)都可以被客戶端直接調(diào)用(這樣客戶端代碼會(huì)多),或被門面角色調(diào)用。子系統(tǒng)并不知道門面的存在,對于子系統(tǒng)而言,門面僅僅是另一個(gè)客戶端而已。

下面我們來看一個(gè)可以提現(xiàn)門面模式的簡單需求:主人為自己的寵物狗辦理的相應(yīng)的寵物領(lǐng)養(yǎng)證件

從這個(gè)簡單的需求中我們可以大致分析出我們需要:主人Person類和寵物狗Dog類 的一些相關(guān)信息

在下面的例子中國會(huì)涉及到接口的驗(yàn)證,現(xiàn)在先將代碼貼出來

//(定義一個(gè)靜態(tài)方法來實(shí)現(xiàn)接口與實(shí)現(xiàn)類的直接檢驗(yàn)//靜態(tài)方法不要寫出Interface.prototype ,因?yàn)檫@是寫到接口的原型鏈上的//我們要把靜態(tài)的函數(shù)直接寫到類層次上//定義一個(gè)接口類var Interface=function (name,methods) {//name:接口名字 if(arguments.length<2){ alert('必須是兩個(gè)參數(shù)') } this.name=name; this.methods=[];//定義一個(gè)空數(shù)組裝載函數(shù)名 for(var i=0;i<methods.length;i++){ if(typeof methods[i]!='string'){ alert('函數(shù)名必須是字符串類型'); }else { this.methods.push( methods[i]); } }};Interface.ensureImplement=function (object) { if(arguments.length<2){ throw new Error('參數(shù)必須不少于2個(gè)') return false; } for(var i=1;i<arguments.length;i++){ var inter=arguments[i]; //如果是接口就必須是Interface類型 if(inter.constructor!=Interface){ throw new Error('如果是接口類的話,就必須是Interface類型'); } //判斷接口中的方法是否全部實(shí)現(xiàn) //遍歷函數(shù)集合 for(var j=0;j<inter.methods.length;j++){ var method=inter.methods[j];//接口中所有函數(shù) //object[method]傳入的函數(shù) //最終是判斷傳入的函數(shù)是否與接口中所用函數(shù)匹配 if(!object[method]||typeof object[method]!='function' ){//實(shí)現(xiàn)類中必須有方法名字與接口中所用方法名相同throw new Error('實(shí)現(xiàn)類中沒有完全實(shí)現(xiàn)接口中的所有方法') } } }}

(1)主人類(Person類)

function Person() { this.name='測試'; this.address='居住在中國'; this.getInfo=function () { return '名字'+this.name+' 地址'+this.address; }; this.learn=function () { alert('學(xué)習(xí)的方法'); } this.marray=function () { alert('marray'); } //驗(yàn)證接口 Interface.ensureImplement(this,PersonDao);//驗(yàn)證該類是否全部實(shí)現(xiàn)接口中的方法 }

(2)寵物狗(Dog類)

var DogDao=new Interface('DogDao',['getInfo','call','run']); var Dog=function () { this.name='gg'; this.getInfo=function () { return '狗狗的名字'+this.name; }; this.call=function () { }; this.run=function () {}; Interface.ensureImplement(this,DogDao);//驗(yàn)證接口 }

(3)現(xiàn)在可以主人可以給自己的寵物狗辦理寵物領(lǐng)養(yǎng)證件了 -----客戶端代碼

第一種方法:不用門面的方式客戶端的代碼如下

function action(person,dog) { var r='GG'+new Date().getDay()+Math.floor(Math.random()*11); var str='辦證成功:編號'+r +'<br/>主人信息'+person.getInfo() +'<br>狗狗的信息:'+dog.getInfo(); return str;}document.write(action(new Person(),new Dog()));

第二種方法:使用門面模式-----將復(fù)雜的事交給門面來做,客戶端壓力可以減小

#1:門面中進(jìn)行如下的處理

function facade(person,dog) { var r='GG'+new Date().getDay()+Math.floor(Math.random()*11); var str='辦證成功:編號'+r +'<br/>主人信息'+person.getInfo() +'<br>狗狗的信息:'+dog.getInfo(); this.action=function () {//相當(dāng)于實(shí)例的方法 return str; }; }

#2,客戶端負(fù)責(zé)使用的代碼為

function action2(person,dog) { document.write(new facade(person,dog).action());}action2(new Person(),new Dog());

總結(jié),我們可以看出不適用門面模式的客戶端需要處理較為復(fù)雜的業(yè)務(wù),使用門面后,在門面中處理復(fù)雜的東西,而客戶端只需要簡單的調(diào)用即可。

一個(gè)簡單理解門面模式的圖結(jié)構(gòu):

JavaScript設(shè)計(jì)模式之門面模式原理與實(shí)現(xiàn)方法分析

感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調(diào)試運(yùn)行工具:http://tools.jb51.net/code/WebCodeRun測試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美黑人粗大 | 国产永久免费高清在线观看视频 | 又黄又爽又猛大片录像 | 久久综合精品国产一区二区三区无 | 一本大道在线观看 | 色偷偷亚洲第一成人综合网址 | 欧美日韩精品一区二区 | 欧美中文字幕一二三四区 | 7799国产精品久久久久99 | 在线国产毛片 | 一区卡二区卡三区卡视频 | 26uuu精品一区二区 | 亚洲成人美女 | 丁香婷婷亚洲 | se婷婷| 色综合久久夜色精品国产 | 中国女人真人一级毛片 | 91视频区| 日韩欧免费一区二区三区 | 亚洲成人aaa | 日韩不卡视频在线 | 蜜桃臀久久伊人福利 | 永久免费观看黄网站 | 亚洲全网成人资源在线观看 | 亚洲精品一区二区三区香蕉在线看 | 日本欧美久久久久免费播放网 | 国语对白avxxxooo | 免费a级黄色毛片 | 免费一级毛片无毒不卡 | 免费精品美女久久久久久久久 | 日韩精品一区二区三区在线观看 | 国产精品久久久久久久久免费观看 | xxxx鞠婧祎xxxx网站视频观看 | 另类欧美亚洲 | 国产精品久久久久影院免费 | 啪视频在线 | 成人中文字幕在线 | 黄色一级片欧美 | 成人亚洲视频在线观看 | 日本免费黄视频 | 一级片视频免费观看 |