JavaScript组合模式学习要点


Posted in Javascript onAugust 26, 2016

组合模式:将一组对象组合成树形结构,并统一对待组合对象和叶对象,忽略它们之间的不同(因为叶对象也可以也可以包含叶对象而成为组合对象),组合模式中的对象只能是一对多的关系,不能出现多对一。

基本单元:一个组合对象包含多个叶对象。每个基本单元又可以是别的组合对象的叶对象类似文件夹与它里面的内容的关系网,一个文件夹或文件又可以是其它文件夹的内容,但一个文件夹或文件不能同时属于多个上级文件夹。

在JavaScript中实现组合模式时,要保证组合对象和叶对象拥有相同的接口方法,对同一组叶对象的操作必须具有一致性。

例子:

//定义组合对象
var Folder = function (name) {
this.name = name;
this.parent = null;
this.files = [];
};
Folder.prototype.add = function (file) {
file.parent = this;
if(this.files.indexOf(file) === -1){
this.files.push(file);
}else{
console.log('\''+file.name+'\'已存在,添加失败');
}
};
Folder.prototype.scan = function () {
if(this.parent){
console.log('开始扫描\''+this.parent.name+'\': '+this.name);
}else{
console.log('开始扫描根目录: '+this.name);
}
//关键在这里,调用所有它的叶对象的接口方法scan()
for(var i = 0, file; file = this.files[i++];){
file.scan();
}
};
Folder.prototype.remove = function (file) {
var n = this.files.indexOf(file);
if(n === -1){console.log('无法删除: \''+file.name+'\'不存在:');}
if(n >= 0){
this.files.splice(n,1);
console.log('成功删除:'+file.name);
}
};
//定义叶对象
var File = function (name) {
this.name = name;
this.parent = null;
};
File.prototype.add = function () {
console.log('不能添加在文件下面');
};
File.prototype.scan = function () {
console.log(this.parent.name+': '+this.name);
};
File.prototype.remove = function (file) {
console.log('无法删除: \''+file.name+'\'不存在:');
};
//测试
var folder = new Folder('目录');
var folder1 = new Folder('学习质料');
var folder2 = new Folder('javascript');
var file1 = new File('Node.js');
var file2 = new File('qq.jpg');
folder.add(folder1);
folder.add(folder1);
folder.add(folder2);
folder1.add(file1);
folder2.add(file2);
//'学习质料'添加成功
//'学习质料'已存在,添加失败
//'javascript'添加成功
//'Node.js'添加成功
//'qq.jpg'添加成功
folder.remove(folder1);
folder.remove(folder1);
file1.remove(file1);
//成功删除:学习质料
//无法删除: '学习质料'不存在:
//无法删除: 'Node.js'不存在:
folder.scan(); //这里相当于执行了一个宏命令
//开始扫描根目录: 目录
//开始扫描'目录': javascript
//javascript: qq.jpg

以上所述是小编给大家介绍的JavaScript组合模式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript中获取未知对象属性的代码
Apr 27 Javascript
Jquery动态更改一张位图的src与Attr的使用
Jul 31 Javascript
JS中window.open全屏命令解析及使用示例
Dec 11 Javascript
用原生JS获取CLASS对象(很简单实用)
Oct 15 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
May 04 Javascript
学习JavaScript设计模式之享元模式
Jan 18 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
Sep 02 Javascript
使用Javascript判断浏览器终端设备(PC、IOS(iphone)、Android)
Jan 04 Javascript
深入理解vue $refs的基本用法
Jul 13 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
Jul 21 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
Nov 14 Javascript
Vue程序调试的方法
Jun 17 Javascript
前端面试题及答案整理(二)
Aug 26 #Javascript
js前端面试题及答案整理(一)
Aug 26 #Javascript
JavaScript中ES6字符串扩展方法
Aug 26 #Javascript
总结十个Angular.js由浅入深的面试问题
Aug 26 #Javascript
Jquery遍历select option和添加移除option的实现方法
Aug 26 #Javascript
响应式表格之固定表头的简单实现
Aug 26 #Javascript
jQuery基于BootStrap样式实现无限极地区联动
Aug 26 #Javascript
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
php adodb操作mysql数据库
2009/03/19 PHP
php中截取中文字符串的代码小结
2011/07/17 PHP
什么情况下可以不写PHP的闭合标签“?>”
2014/08/28 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
整理Javascript基础语法学习笔记
2015/11/29 Javascript
第九篇Bootstrap导航菜单创建步骤详解
2016/06/21 Javascript
使用jQuery调用XML实现无刷新即时聊天
2016/08/07 Javascript
jQuery设置图片等比例缩小的方法
2017/04/29 jQuery
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
Vue路由管理器Vue-router的使用方法详解
2020/02/05 Javascript
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
基于Tensorflow一维卷积用法详解
2020/05/22 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
2020/11/05 Python
python批量合成bilibili的m4s缓存文件为MP4格式 ver2.5
2020/12/01 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
Pytorch模型迁移和迁移学习,导入部分模型参数的操作
2021/03/03 Python
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
实习教师个人的自我评价
2013/11/08 职场文书
十佳美德少年事迹材料
2014/02/05 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
金融保险专业求职信
2014/09/03 职场文书
开业庆典嘉宾致辞
2015/08/01 职场文书
会计入职心得体会
2016/01/22 职场文书
纪检干部学习心得体会
2016/01/23 职场文书
python 多态 协议 鸭子类型详解
2021/11/27 Python