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

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

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

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

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

對于組合設計模式:

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

根據(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']);//側重點獲取子var student=new Interface('composite',['goToClass','finishClass']);//側重點為每個對象的實現(xiàn)

(2)定義組合類

var compositeObj=function (name) { this.name=name; this.type='com';//默認是組合類 var childs=new Array();//得到相關的所有孩子節(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';//默認是葉子 //得到所有孩子節(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)應用---將學校,班級,組,學生關聯(lián)起來

var astudent=new studentObj('我是a同學'); var bstudent=new studentObj('我是b同學'); var cstudent=new studentObj('我是c同學'); var dstudent=new studentObj('我是d同學'); var estudent=new studentObj('我是e同學'); var fstudent=new studentObj('我是f同學'); var gstudent=new studentObj('我是g同學'); var hstudent=new studentObj('我是h同學'); var istudent=new studentObj('我是i同學'); 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('組合設計模式培訓學校'); 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測試上述代碼運行效果。

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

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

標簽: JavaScript
相關文章:
主站蜘蛛池模板: EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 上海软件开发-上海软件公司-软件外包-企业软件定制开发公司-咏熠科技 | 陕西高职单招-陕西高职分类考试网 | 柔性输送线|柔性链板|齿形链-上海赫勒输送设备有限公司首页[输送机] | 江苏皓越真空设备有限公司| 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 工业插头-工业插头插座【厂家】-温州罗曼电气 | 广东之窗网| 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 郑州巴特熔体泵有限公司专业的熔体泵,熔体齿轮泵与换网器生产厂家 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 钢衬玻璃厂家,钢衬玻璃管道 -山东东兴扬防腐设备有限公司 | 禹城彩钢厂_钢结构板房_彩钢复合板-禹城泰瑞彩钢复合板加工厂 | PC构件-PC预制构件-构件设计-建筑预制构件-PC构件厂-锦萧新材料科技(浙江)股份有限公司 | 许昌奥仕达自动化设备有限公司 | 便民信息网_家电维修,家电清洗,开锁换锁,本地家政公司 | 西安烟道厂家_排气道厂家_包立管厂家「陕西西安」推荐西安天宇烟道 | 永嘉县奥阳陶瓷阀门有限公司| 烟气换热器_GGH烟气换热器_空气预热器_高温气气换热器-青岛康景辉 | 水平垂直燃烧试验仪-灼热丝试验仪-漏电起痕试验仪-针焰试验仪-塑料材料燃烧检测设备-IP防水试验机 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | TPE_TPE热塑性弹性体_TPE原料价格_TPE材料厂家-惠州市中塑王塑胶制品公司- 中塑王塑胶制品有限公司 | 南京种植牙医院【官方挂号】_南京治疗种植牙医院那个好_南京看种植牙哪里好_南京茀莱堡口腔医院 尼龙PA610树脂,尼龙PA612树脂,尼龙PA1010树脂,透明尼龙-谷骐科技【官网】 | 无锡装修装潢公司,口碑好的装饰装修公司-无锡索美装饰设计工程有限公司 | 山东成考网-山东成人高考网 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 钢衬四氟管道_钢衬四氟直管_聚四氟乙烯衬里管件_聚四氟乙烯衬里管道-沧州汇霖管道科技有限公司 | 起好名字_取个好名字_好名网免费取好名在线打分| 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 浙江筋膜枪-按摩仪厂家-制造商-肩颈按摩仪哪家好-温州市合喜电子科技有限公司 | 深圳VI设计-画册设计-LOGO设计-包装设计-品牌策划公司-[智睿画册设计公司] | 集装箱标准养护室-集装箱移动式养护室-广州璟业试验仪器有限公司 | 爱佩恒温恒湿测试箱|高低温实验箱|高低温冲击试验箱|冷热冲击试验箱-您身边的模拟环境试验设备技术专家-合作热线:400-6727-800-广东爱佩试验设备有限公司 | 英超直播_英超免费在线高清直播_英超视频在线观看无插件-24直播网 | 定量包装秤,吨袋包装称,伸缩溜管,全自动包装秤,码垛机器人,无锡市邦尧机械工程有限公司 | 食品机械专用传感器-落料放大器-低价接近开关-菲德自控技术(天津)有限公司 | 高铝轻质保温砖_刚玉莫来石砖厂家_轻质耐火砖价格 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 |