电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

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

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

外部與一個(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ā)來的請(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è)客戶端而已。

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

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

在下面的例子中國(guó)會(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='測(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 +'<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='辦證成功:編號(hào)'+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ù)雜的東西,而客戶端只需要簡(jiǎn)單的調(diào)用即可。

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

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

感興趣的朋友可以使用在線HTML/CSS/JavaScript前端代碼調(diào)試運(yùn)行工具:http://tools.jb51.net/code/WebCodeRun測(cè)試上述代碼運(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é)》

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

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 土壤检测仪器_行星式球磨仪_土壤团粒分析仪厂家_山东莱恩德智能科技有限公司 | 上海洗地机-洗地机厂家-全自动洗地机-手推式洗地机-上海滢皓洗地机 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 高通量组织研磨仪-多样品组织研磨仪-全自动组织研磨仪-研磨者科技(广州)有限公司 | 浙江上沪阀门有限公司 | 手板_手板模型制作_cnc手板加工厂-东莞天泓 | 深圳APP开发_手机软件APP定制外包_小程序开发公司-来科信 | 光栅尺_Magnescale探规_磁栅尺_笔式位移传感器_苏州德美达 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 云阳人才网_云阳招聘网_云阳人才市场_云阳人事人才网_云阳人家招聘网_云阳最新招聘信息 | 厌氧工作站-通用型厌氧工作站-上海胜秋科学仪器有限公司 | SPC工作站-连杆综合检具-表盘气动量仪-内孔缺陷检测仪-杭州朗多检测仪器有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 我爱古诗词_古诗词名句赏析学习平台 | 礼堂椅厂家|佛山市艺典家具有限公司 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 防水套管厂家_刚性防水套管_柔性防水套管_不锈钢防水套管-郑州中泰管道 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 仿古瓦,仿古金属瓦,铝瓦,铜瓦,铝合金瓦-西安东申景观艺术工程有限公司 | 高光谱相机-近红外高光谱相机厂家-高光谱成像仪-SINESPEC 赛斯拜克 | NM-02立式吸污机_ZHCS-02软轴刷_二合一吸刷软轴刷-厦门地坤科技有限公司 | 工业电炉,台车式电炉_厂家-淄博申华工业电炉有限公司 | 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | ★店家乐|服装销售管理软件|服装店收银系统|内衣店鞋店进销存软件|连锁店管理软件|收银软件手机版|会员管理系统-手机版,云版,App | 成都珞石机械 - 模温机、油温机、油加热器生产厂家 | 背压阀|减压器|不锈钢减压器|减压阀|卫生级背压阀|单向阀|背压阀厂家-上海沃原自控阀门有限公司 本安接线盒-本安电路用接线盒-本安分线盒-矿用电话接线盒-JHH生产厂家-宁波龙亿电子科技有限公司 | 发电机价格|发电机组价格|柴油发电机价格|柴油发电机组价格网 | 洛阳防爆合格证办理-洛阳防爆认证机构-洛阳申请国家防爆合格证-洛阳本安防爆认证代办-洛阳沪南抚防爆电气技术服务有限公司 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 裹包机|裹膜机|缠膜机|绕膜机-上海晏陵智能设备有限公司 | 螺旋叶片_螺旋叶片成型机_绞龙叶片_莱州源泽机械制造有限公司 | 炭黑吸油计_测试仪,单颗粒子硬度仪_ASTM标准炭黑自销-上海贺纳斯仪器仪表有限公司(HITEC中国办事处) | 厂厂乐-汇聚海量采购信息的B2B微营销平台-厂厂乐官网 | 精密模具加工制造 - 富东懿 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 皮带机-带式输送机价格-固定式胶带机生产厂家-河南坤威机械 | 酒吧霸屏软件_酒吧霸屏系统,酒吧微上墙,夜场霸屏软件,酒吧点歌软件,酒吧互动游戏,酒吧大屏幕软件系统下载 | 单级/双级旋片式真空泵厂家,2xz旋片真空泵-浙江台州求精真空泵有限公司 | POM塑料_PBT材料「进口」聚甲醛POM杜邦原料、加纤PBT塑料报价格找利隆塑料 | 订做不锈钢_不锈钢定做加工厂_不锈钢非标定制-重庆侨峰金属加工厂 |