问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JavaScript设计模式与实践——组合模式

发布网友 发布时间:2024-10-04 08:34

我来回答

1个回答

热心网友 时间:2024-11-07 14:01

组合模式什么是组合模式

组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的‘孙对象’构成的。

简单来说,组合模式是一种树型结构,具有子对象的对象称为组合对象,不具有子对象的对象称为叶对象。请求从树的最顶端向下传递,类似二叉树的深度遍历。

组合模式的用途

表示树型结构。

统一对待组合对象和叶对象

JavaScript中的组合模式

由于组合模式统一对待组合对象和叶对象,所以需要保证组合对象和叶对象拥有同样的方法。在JavaScript中,对象的多态性是与生俱来的,也没有编译器检查变量的类型。所以通常需要用鸭子类型的思想进行接口检查。

组合模式的例子————扫描文件夹

文件系统中,文件夹对应组合对象,文件对应叶对象。当我们操作一个文件夹时,我们不需要关心文件夹中的内容,我们只需要对文件夹进行操作,然后文件夹操作会递归往下进行。

constFolder=function(name){this.name=name;this.files=[];};Folder.prototype.add=function(file){this.files.push(file);};Folder.prototype.scan=function(){console.log('开始扫描文件夹:'+this.name);for(leti=0,file,files=this.files;(file=files[i++]);){file.scan();}};constFile=function(name){this.name=name;};File.prototype.scan=function(){console.log(`开始扫描文件:${this.name}`);};File.prototype.add=function(){thrownewError('文件不能添加文件');};letfolder=newFolder('前端');letfolder1=newFolder('框架');letfolder2=newFolder('JavaScript');letfile1=newFile('Html');letfile2=newFile('Css');letfile3=newFile('Vue');folder1.add(file3);folder2.add(file1);folder2.add(file2);folder.add(folder1);folder.add(folder2);folder.scan();何时使用组合模式

表示对象的部分-整体层次结构。组合模式可以方便的构造一棵树来表示对象的部分-整体结构。

希望统一对待树中的所有对象。组合模式使用户可以忽略组合对象和叶对象的区别,客户在面对这棵树的时候,不用关心当前正在处理的对象是组合对象还是叶对象。

小结

组合模式并不是完美的,组合模式可能会产生这样一个系统:系统中的每个对象看起来都与其他对象差不多。他们的区别只有在运行时才会显现出来,这会使代码难以理解。此外,由于每个对象都必须保持统一,这就是创建的每个对象都必须具有对象自身所需方法,及组合模式统一方法,如果创建过多对象,可能会让系统不能负担。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...其他人都无问题,确定网络连接无问题,请问是什么原因? 描写花朵从花蕾到开放的句子 描写花蕾的优美句子 ...毒毛和鲜艳色斑,一般食虫鸟不敢捕食,这在生物学上属于…( )A.保护... 安徽名人出身地 山东中专学校有哪些? 山东现代职业学院毕业是本科还是大专还是高职? 我春考考了374我不知道报哪个学校 山东现代学院中专部好不好 为什么我号卖了100元藏宝阁待审核金就40元 是咋么回事呀 ...用英语翻译,还有陈述、否定、肯定回答和否定回答 专利权和著作权区别都有哪些 怎么清理百度云网盘的存储空间啊? 英国高中有哪些 .NET Framework API (Microsoft)的中文全称是什么? 我国的专利权特性包括什么? 英国留学哪些高中学校比较好 商标权专利权著作权区别有几点 “NET”指代什么? 如果喜欢上一个把你当成妹妹的人,那你会向他表白吗? 你说当你和某某女孩有那么点情,是帮她变成自己的女朋友还是妹妹... UT是什么啊 UT是什么东东~ ...D11HOST.EXE这个,但是这个好象是个病毒,怎么删除?直接删除注册表可以... 微信超额要身份证怎么办 哪个银行的信用卡合适 招行的什么信用卡好办 什么简单的家常菜最养胃 吃语文书里的食物 不丹跟卡塔尔的关系 JavaScript:node里有parentNode,parenrNode里还有parentNode,如何递归... 青烟威荣城际铁路建设意义 胶东半岛将搭乘城际轨道快车 山东首条城际铁路开通高铁APP提供海滨特色餐饮 烟威青荣城际铁路大家都知道了吧~ 可是有人知道烟台莱山区,芝罘区,牟 ... 英语 谁的生日在6月? " 没有人的生日在六月"这句话用英文怎么说? 他妹妹的生日也在六月吗?英文怎么说 扁桃体有脓点会自愈吗 化脓性扁桃体炎并发症 森林火灾怎么救援 他们一定会弄清事实真相 用英语怎么说 ...是我妈生日结果我给忘了,你能记得你妈妈的生日吗? 工业全自动洗衣机工业全自动洗衣机结构特点 工业洗衣机产品结构 森林防火服的穿戴方法 你的生日真的是一月一号吗 ,日语怎么说? 林林20岁,过了5个生日,请问是那一月那一日的生日 扑灭山火有什么注意事项 有N个人都属猪,而且生日都在同一天,某年在他们生日那天,他们的年龄的...