日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

JavaScript組合設(shè)計模式--改進引入案例分析

瀏覽:124日期:2023-10-25 14:37:15

本文實例講述了JavaScript組合設(shè)計模式--改進引入案例。分享給大家供大家參考,具體如下:

對于組合設(shè)計模式:

(1)組合模式中把對象分為兩種(組合對象,和葉子對象) (2)組合對象和葉子對象實現(xiàn):同一批操作 (3)對組合對象執(zhí)行的操作可以向下傳遞到葉子節(jié)點進行操作 (4)這樣就會弱化類與類之間的耦合 (5)他常用的手法是把對象組合成屬性結(jié)構(gòu)的對象

根據(jù)組合模式的這些特性我們改寫代碼如下:

由于用到了接口檢驗所以我們先引入接口文件代碼

//定義一個靜態(tài)方法來實現(xiàn)接口與實現(xiàn)類的直接檢驗//靜態(tài)方法不要寫出Interface.prototype ,因為這是寫到接口的原型鏈上的//我們要把靜態(tài)的函數(shù)直接寫到類層次上//定義一個接口類var Interface=function (name,methods) {//name:接口名字 if(arguments.length<2){ alert('必須是兩個參數(shù)') } this.name=name; this.methods=[];//定義一個空數(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個') return false; } for(var i=1;i<arguments.length;i++){ var inter=arguments[i]; //如果是接口就必須是Interface類型 if(inter.constructor!=Interface){ throw new Error('如果是接口類的話,就必須是Interface類型'); } //判斷接口中的方法是否全部實現(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' ){//實現(xiàn)類中必須有方法名字與接口中所用方法名相同throw new Error('實現(xiàn)類中沒有完全實現(xiàn)接口中的所有方法') } } }}

(1)統(tǒng)一接口

var composite=new Interface('composite',['getChildByName','add']);//側(cè)重點獲取子var student=new Interface('composite',['goToClass','finishClass']);//側(cè)重點為每個對象的實現(xiàn)

(2)定義組合類

var compositeObj=function (name) { this.name=name; this.type='com';//默認(rèn)是組合類 var childs=new Array();//得到相關(guān)的所有孩子節(jié)點 this.getChildByName=function (name) { //涉及到遞歸 var toChilds=new Array(); if(!name){ for(var i=0;i<childs.length;i++){if(childs[i].type=='com'){ toChilds=toChilds.concat(childs[i].getChildByName())}else { toChilds.push(childs[i]);} } }else { for (var i = 0; i < childs.length; i++){ if(childs[i].name==name){ if(childs[i].type=='com'){ toChilds=toChilds.concat(childs[i].getChildByName()); break; }else { toChilds.push(childs[i]); break; } }else { if(childs[i].type == 'com'){ toChilds =toChilds.concat(childs[i].getChildByName(name)); } } } } return toChilds; }; //增加子節(jié)點 this.add=function (child) { childs.push(child); return this; }; //去上課this.goToClass=function (name) {var toChilds=this.getChildByName(name); for(var i=0;i<toChilds.length;i++){ toChilds[i].goToClass(); } }; //下課 this.finishClass=function (name) { var toChilds=this.getChildByName(name); for(var i=0;i<toChilds.length;i++){toChilds[i].finishClass(); } }; Interface.ensureImplement(this,composite,student); };

(3)定義葉子類

var studentObj=function (name) { this.name=name; this.type='student';//默認(rèn)是葉子 //得到所有孩子節(jié)點 this.getChildByName=function (name) { if(this.name==name){ return this; }else { return null; } } //增加子節(jié)點 this.add=function (child) { throw new Error('add 不成被初始化(在葉子了中)') } //去上課 this.goToClass = function(name){ document.write(this.name +' 去上課<br>'); } //下課 this.finishClass = function(name){ document.write(this.name +' 下課<br>'); } Interface.ensureImplement(this,composite,student); }

(4)應(yīng)用---將學(xué)校,班級,組,學(xué)生關(guān)聯(lián)起來

var astudent=new studentObj('我是a同學(xué)'); var bstudent=new studentObj('我是b同學(xué)'); var cstudent=new studentObj('我是c同學(xué)'); var dstudent=new studentObj('我是d同學(xué)'); var estudent=new studentObj('我是e同學(xué)'); var fstudent=new studentObj('我是f同學(xué)'); var gstudent=new studentObj('我是g同學(xué)'); var hstudent=new studentObj('我是h同學(xué)'); var istudent=new studentObj('我是i同學(xué)'); var one = new compositeObj('一班'); var oneOne = new compositeObj('一班一組'); oneOne.add(astudent).add(bstudent); var oneTwo = new compositeObj('一班二組'); oneTwo.add(cstudent).add(dstudent); one.add(oneOne).add(oneTwo); var two = new compositeObj('二班'); var twoOne = new compositeObj('二班一組'); twoOne.add(estudent).add(fstudent); var twoTwo = new compositeObj('二班二組'); twoTwo.add(gstudent).add(hstudent).add(istudent) two.add(twoOne).add(twoTwo); var usPcat = new compositeObj('組合設(shè)計模式培訓(xùn)學(xué)校'); usPcat.add(one).add(two);

(5)客戶端調(diào)用API,只需要簡單的安排去上課即可,也就是客戶端只需要寫去上課的代碼即可

usPcat.goToClass();document.write('-------------------------<br>');usPcat.goToClass('一班');document.write('-------------------------<br>');usPcat.goToClass('二班一組');

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

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

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久三级毛片| 精品国产精品久久一区免费式| 日本不良网站在线观看| 国产精品亚洲综合久久| 国产乱人伦丫前精品视频| 91嫩草精品| 911亚洲精品| 国产精品视频3p| 国产高清视频一区二区| 久久一区精品| 香蕉成人av| 九九在线精品| 亚洲一区二区三区高清不卡| 在线看片一区| 欧美久久一区二区三区| 婷婷综合成人| 国产精品chinese| 91亚洲国产高清| 欧美日韩一区二区综合| 中文日韩欧美| 日韩av中文字幕一区| 国产精品99精品一区二区三区∴| 久久一区亚洲| 久久精品高清| 亚洲色图网站| 欧美国产另类| 日韩综合精品| 奶水喷射视频一区| 久久激情综合网| 另类专区亚洲| japanese国产精品| 在线国产日韩| 国产劲爆久久| 亚洲美女久久精品| 性色一区二区| 久久久久伊人| 欧美日韩精品一本二本三本| 亚洲三区欧美一区国产二区| 欧美激情在线精品一区二区三区| 色网在线免费观看| 国产日韩综合| 国产乱码精品一区二区三区亚洲人| 精品精品99| 中文亚洲欧美| 精品久久久网| 日韩欧美字幕| 亚洲精品免费观看| 91一区二区| 999在线观看精品免费不卡网站| 日韩精品第一| 日韩电影免费网站| 亚洲人成高清| 蜜桃成人精品| 日本午夜精品| 欧美一级精品| 国产高清亚洲| 视频一区二区三区入口| 欧美aa在线视频| 中国女人久久久| 久久一区国产| 免费看的黄色欧美网站| 美女久久久久久 | 亚洲视频播放| 欧美国产不卡| 日韩制服丝袜av| 91综合网人人| 欧美日韩伊人| 国产日韩综合| 久久久久国产精品一区二区| 丝袜国产日韩另类美女| аⅴ资源天堂资源库在线| 亚洲精品女人| 欧美日韩水蜜桃| 久久国产精品免费精品3p| 久久视频一区| 欧美激情99| 亚洲精品影视| 999视频精品| 国产精品多人| 亚洲欧美日韩视频二区| 成人综合一区| 国产丝袜一区| 日韩专区欧美专区| 久久精品观看| 麻豆精品视频在线观看视频| 久久国产66| 久久精品91| 亚洲精品成人图区| 精品国产亚洲一区二区三区大结局| 亚洲美女91| 亚洲在线观看| 国产99久久| av在线日韩| 国产91在线精品| 卡一卡二国产精品| 国产麻豆精品久久| 日韩精品三级| 三级欧美韩日大片在线看| 午夜国产精品视频免费体验区| 给我免费播放日韩视频| 国产精品v日韩精品v欧美精品网站| 午夜性色一区二区三区免费视频| 夜夜嗨av一区二区三区网站四季av| av综合电影网站| 91亚洲自偷观看高清| 精品国产aⅴ| 免费在线日韩av| 国产精品一国产精品| 日韩精品久久久久久久软件91| 久久亚洲欧美| 免费看黄色91| 日韩专区在线视频| 蜜臀av国产精品久久久久| 免费久久99精品国产自在现线| 欧美日韩第一| 激情久久中文字幕| 亚洲先锋成人| 激情综合网站| 国产精品老牛| 日韩中文字幕av电影| 亚洲网址在线观看| 亚洲人成网站在线在线观看| 三级在线观看一区二区| 中文字幕免费精品| 日韩久久99| 国产九一精品| 久久精品亚洲一区二区| 国产精品白丝久久av网站| 精品淫伦v久久水蜜桃| 精品一区二区三区中文字幕| 国产成年精品| 九色porny丨国产首页在线| 亚洲一级影院| 亚洲字幕久久| 国产欧美日韩一区二区三区在线| 国产精品扒开腿做爽爽爽软件| 国模精品一区| 88xx成人免费观看视频库| 欧美一级精品| 视频一区二区国产| 国产欧美日韩亚洲一区二区三区| 久久久久久亚洲精品美女| 日韩精品永久网址| 欧美日韩激情在线一区二区三区| 91精品观看| 亚洲精品看片| 免费亚洲一区| 麻豆精品蜜桃| 天堂成人国产精品一区| 青青草精品视频| 久草免费在线视频| 中文在线一区| 国产精品探花在线观看| 91精品xxx在线观看| 一本色道精品久久一区二区三区| 亚洲精品第一| 精品一区二区男人吃奶| 99精品视频在线| 亚洲毛片在线| 精品视频国产| 精品欧美激情在线观看| 日韩一区二区三区四区五区 | 日韩中文av| 成人亚洲精品| 好看不卡的中文字幕| 日本午夜精品久久久| 日韩精品中文字幕第1页| 男女性色大片免费观看一区二区| 国产精品一区二区三区www| 波多野结衣久久精品| 免费人成在线不卡| 精品视频国产| 亚洲欧美久久久| 欧美精品成人| 亚洲va在线| 日本免费在线视频不卡一不卡二| 日韩av在线中文字幕| 亚洲深夜影院| 麻豆久久一区二区| 99在线观看免费视频精品观看| 国产精品亚洲二区| 亚洲午夜视频| 国产精品久久免费视频| 九九在线精品| 久久精品国产久精国产| 美女国产一区| av资源新版天堂在线| 亚洲69av| 日韩毛片在线| 91亚洲精品视频在线观看| 999国产精品999久久久久久| 国产日本亚洲| 在线国产一区二区| 国产欧美在线| 亚洲欧美不卡| 日韩国产一区二区| 国产精选一区| 最近国产精品视频| 国产99精品一区| 国产一区二区三区不卡视频网站 |