這篇文章將為大家詳細(xì)講解有關(guān)JavaScript門面模式的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的南昌縣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
外部與一個(gè)子系統(tǒng)的通信必須通過一個(gè)系統(tǒng)的一個(gè)門面對(duì)象進(jìn)行,這就是門面模式。
門面模式具備如下兩個(gè)角色:
1. 門面角色
客戶端可以調(diào)用這個(gè)角色方法,此角色中有子系統(tǒng)的應(yīng)用(知曉相關(guān)的(一個(gè)或多個(gè))子系統(tǒng)的功能和責(zé)任)。本角色會(huì)將所有從客戶端發(fā)來(lái)的請(qǐng)求委派到相應(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)并不知道門面的存在,對(duì)于子系統(tǒng)而言,門面僅僅是另一個(gè)客戶端而已。
下面我們來(lái)看一個(gè)可以提現(xiàn)門面模式的簡(jiǎn)單需求:主人為自己的寵物狗辦理的相應(yīng)的寵物領(lǐng)養(yǎng)證件
從這個(gè)簡(jiǎn)單的需求中我們可以大致分析出我們需要:主人Person類和寵物狗Dog類 的一些相關(guān)信息
在下面的例子中國(guó)會(huì)涉及到接口的驗(yàn)證,現(xiàn)在先將代碼貼出來(lái)
//(定義一個(gè)靜態(tài)方法來(lá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(1)主人類(Person類)
function Person() { this.name="測(cè)試"; this.address="居住在中國(guó)"; 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="辦證成功:編號(hào)"+r +"
主人信息"+person.getInfo() +"
狗狗的信息:"+dog.getInfo(); return str; }document.write(action(new Person(),new Dog()));第二種方法:使用門面模式-----將復(fù)雜的事交給門面來(lái)做,客戶端壓力可以減小
#1:門面中進(jìn)行如下的處理
function facade(person,dog) { var r="GG"+new Date().getDay()+Math.floor(Math.random()*11); var str="辦證成功:編號(hào)"+r +"
主人信息"+person.getInfo() +"
狗狗的信息:"+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ù)雜的東西,而客戶端只需要簡(jiǎn)單的調(diào)用即可。
一個(gè)簡(jiǎn)單理解門面模式的圖結(jié)構(gòu):
關(guān)于“JavaScript門面模式的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
文章名稱:JavaScript門面模式的示例分析
網(wǎng)站鏈接:http://weahome.cn/article/jjhcip.html