这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
组合模式大概是设计模式里面使用最为广泛的模式之一了,模式本身理解起来也比较简单,以至于可以毫不费力的写出一个能用的组合模式伪代码
组合模式:将一组对象组合成树形结构,并统一对待组合对象和叶对象,忽略它们之间的不同(因为叶对象也可以也可以包含叶对象而成为组合对象),组合模式中的对象只能是一对多的关系,不能出现多对一。
基本单元:一个组合对象包含多个叶对象。每个基本单元又可以是别的组合对象的叶对象类似文件夹与它里面的内容的关系网,一个文件夹或文件又可以是其它文件夹的内容,但一个文件夹或文件不能同时属于多个上级文件夹。
在 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 组合模式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 phperz 网站的支持!
来源: http://www.phperz.com/article/17/0614/332298.html