国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

JavaScript設計模式之門面模式原理與實現方法分析

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

本文實例講述了JavaScript設計模式之門面模式原理與實現方法。分享給大家供大家參考,具體如下:

外部與一個子系統的通信必須通過一個系統的一個門面對象進行,這就是門面模式。

門面模式具備如下兩個角色:

1. 門面角色

客戶端可以調用這個角色方法,此角色中有子系統的應用(知曉相關的(一個或多個)子系統的功能和責任)。本角色會將所有從客戶端發來的請求委派到相應的子系統去。

2. 子系統角色

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

下面我們來看一個可以提現門面模式的簡單需求:主人為自己的寵物狗辦理的相應的寵物領養證件

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

在下面的例子中國會涉及到接口的驗證,現在先將代碼貼出來

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

(1)主人類(Person類)

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

(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);//驗證接口 }

(3)現在可以主人可以給自己的寵物狗辦理寵物領養證件了 -----客戶端代碼

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

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()));

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

#1:門面中進行如下的處理

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 () {//相當于實例的方法 return str; }; }

#2,客戶端負責使用的代碼為

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

總結,我們可以看出不適用門面模式的客戶端需要處理較為復雜的業務,使用門面后,在門面中處理復雜的東西,而客戶端只需要簡單的調用即可。

一個簡單理解門面模式的圖結構:

JavaScript設計模式之門面模式原理與實現方法分析

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

更多關于JavaScript相關內容還可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 国产欧美综合在线一区二区三区 | 日本一区二区三区四区无限 | 亚洲高清毛片 | 全部毛片 | 国产一国产一级毛片视频在线 | 日本不卡免费高清一级视频 | 欧美激情精品久久久久 | 古代级a毛片可以免费看 | 台湾三级香港三级经典三在线 | 自拍偷拍视频在线观看 | 自拍 欧美 在线 综合 另类 | 特级毛片8级毛片免费观看 特级毛片免费观看视频 | 99在线精品免费视频九九视 | 久久久这里只有精品免费 | 欧美a大片 | 国产a一级毛片含羞草传媒 国产a自拍 | 免费一区二区三区四区 | 一级做a爱片久久毛片 | 99久久精品视香蕉蕉er热资源 | 国内免费视频成人精品 | 国产或人精品日本亚洲77美色 | 一级做a爰片久久毛片人呢 一级做a爰片久久毛片唾 | 99久久精品国产免看国产一区 | 国产成人精品999在线 | 亚洲免费区 | 国产成人精品曰本亚洲 | 波多野结衣在线免费观看视频 | 成年午夜性视频免费播放 | 国内精品伊人久久久久妇 | 国产在线拍揄自揄视精品不卡 | 国产精品成人免费观看 | 特黄的欧美毛片 | 日本一区二区三区国产 | 欧美日韩国产综合一区二区三区 | 国产女人在线视频 | 日本草草影院 | 97超级碰碰碰免费公开在线观看 | 精品视频国产狼人视频 | 热99re久久国超精品首页 | 99国产欧美久久精品 | a一级毛片免费高清在线 |