首页 >> js开发 >> js代码javascript 设计模式之组合模式原理与应用详解
js代码javascript 设计模式之组合模式原理与应用详解
发布时间: 2021年1月13日 | 浏览:
| 分类:js开发
本文实例讲述了javascript 设计模式之组合模式原理与应用。分享给大家供大家参考,具体如下:组合模式说明组合模式用于简单化,一致化对单组件和复合组件的使用;其实它就是一棵树;这棵树有且只有一个根,访问入口,如果它不是一棵空树,那么由一个或几个树枝节点以及子叶节点组成,每个树枝节点还包含自己的子树枝以及子叶节点;在面向对象编程中,叶子以及复杂对象(树枝节点)都继承一个接口或抽象类分别实现;这个抽象定义一般三个部分组成,组件的基本信息,Add方法,Remove方法;叶子节点只包含本身的数据,Add, Remove 基本为空操作;树枝节点实现组件时,一般包含一个数组定义,用于存储子叶或树枝节点,还包括一个获取所有子节点的方法: 如GetList;实例场景:实例场景:1>. 自然界中的各种树,树长在大地人,树头(树根),即是入口点,这棵树头向上生长,即有自己的叶子,又有自己的子树枝,某树枝还有自己的叶子,跟子树枝;2>. 操作系统目录结构、公司部门组织架构、国家省市县、宇宙万物都有单独元物质以及物物包含的现象,像这么看起来复杂的现象,都可以使用组合模式,即部分-整体模式来操作;一棵树:一棵树: 组合模式结构图: 组合模式结构图:实例源码1. Component 组件;
function Component() {
this.name = '';
}
Component.prototype = {
Add: function(comp) {
//rewrite
},
Remove: function(name) {
//rewrite
},
set: function(name) {
this.name = name;
},
operate: function() {
//...
}
}
var comp = new Component();
function Component() {
this.name = '';
}
Component.prototype = {
Add: function(comp) {
//rewrite
},
Remove: function(name) {
//rewrite
},
set: function(name) {
this.name = name;
},
operate: function() {
//...
}
}
var comp = new Component();
2. Leaf 叶子节点;
function Leaf() {
}
Leaf.prototype = Object.create(comp, {});
Leaf.prototype.get = function() {
return this.name;
}
function Leaf() {
}
Leaf.prototype = Object.create(comp, {});
Leaf.prototype.get = function() {
return this.name;
}
3. 树枝节点:
function Composite() {
this.list = [];
}
Composite.prototype = Object.create(comp, {});
Composite.prototype = {
Add: function(comp) {
this.list.push(comp);
},
Remove: function(name) {
for (i in this.list) {
var cmp = this.list[i];
if (cmp.name == name) {
delete this.list[i];
break;
}
}
},
operate: function() {
//do...
},
getList: function(name) {
var cmp;
for (i in this.list) {
cmp = this.list[i];
if (cmp.name == name) {
break;
}
}
return cmp;
}
}
function Composite() {
this.list = [];
}
Composite.prototype = Object.create(comp, {});
Composite.prototype = {
Add: function(comp) {
this.list.push(comp);
},
Remove: function(name) {
for (i in this.list) {
var cmp = this.list[i];
if (cmp.name == name) {
delete this.list[i];
break;
}
}
},
operate: function() {
//do...
},
getList: function(name) {
var cmp;
for (i in this.list) {
cmp = this.list[i];
if (cmp.name == name) {
break;
}
}
return cmp;
}
}
叶子节点基本可以直接使用 Component 的结构,或是直接以 Component 来创建,Composite 树枝节点,就必须重写 Add , Remove, operate 等方法;使用方法:
var root = new Composite();
root.set("root");
//叶子
var leaf = new Leaf();
leaf.set('顶级叶子');
root.Add(leaf);
//树枝节点;
var child = new Composite();
child.set('child');
var childschild = new Composite();
childschild.set('cchild');
child.Add(childschild);
root.Add(child);
root.operate();
var root = new Composite();
root.set("root");
//叶子
var leaf = new Leaf();
leaf.set('顶级叶子');
root.Add(leaf);
//树枝节点;
var child = new Composite();
child.set('child');
var childschild = new Composite();
childschild.set('cchild');
child.Add(childschild);
root.Add(child);
root.operate();
其他说明组合模式,是一种结构型的设计模式,主要用于一致化处理简单元素和复杂元素操作,使得客户端使用可以与复合结构复杂的情况相解藕;客户端使用时,搜索递归到需要的节点或位置,都可以使用统一方法,不管是叶子节点或是树枝节点进行一致操作;在面向对象动态语言里,其实Javascript 也差不多,就可以无需知道元素结构,进行查询,添加,删除的操作;感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools./code/HtmlJsRun测试上述代码运行效果。在线HTML/CSS/JavaScript代码运行工具在线HTML/CSS/JavaScript代码运行工具http://tools./code/HtmlJsRun关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》javascript面向对象入门教程JavaScript错误与调试技巧总结JavaScript数据结构与算法技巧总结JavaScript遍历算法与技巧总结JavaScript数学运算用法总结希望本文所述对大家JavaScript程序设计有所帮助。
function Component() {
this.name = '';
}
Component.prototype = {
Add: function(comp) {
//rewrite
},
Remove: function(name) {
//rewrite
},
set: function(name) {
this.name = name;
},
operate: function() {
//...
}
}
var comp = new Component();
function Component() {
this.name = '';
}
Component.prototype = {
Add: function(comp) {
//rewrite
},
Remove: function(name) {
//rewrite
},
set: function(name) {
this.name = name;
},
operate: function() {
//...
}
}
var comp = new Component();
2. Leaf 叶子节点;
function Leaf() {
}
Leaf.prototype = Object.create(comp, {});
Leaf.prototype.get = function() {
return this.name;
}
function Leaf() {
}
Leaf.prototype = Object.create(comp, {});
Leaf.prototype.get = function() {
return this.name;
}
3. 树枝节点:
function Composite() {
this.list = [];
}
Composite.prototype = Object.create(comp, {});
Composite.prototype = {
Add: function(comp) {
this.list.push(comp);
},
Remove: function(name) {
for (i in this.list) {
var cmp = this.list[i];
if (cmp.name == name) {
delete this.list[i];
break;
}
}
},
operate: function() {
//do...
},
getList: function(name) {
var cmp;
for (i in this.list) {
cmp = this.list[i];
if (cmp.name == name) {
break;
}
}
return cmp;
}
}
function Composite() {
this.list = [];
}
Composite.prototype = Object.create(comp, {});
Composite.prototype = {
Add: function(comp) {
this.list.push(comp);
},
Remove: function(name) {
for (i in this.list) {
var cmp = this.list[i];
if (cmp.name == name) {
delete this.list[i];
break;
}
}
},
operate: function() {
//do...
},
getList: function(name) {
var cmp;
for (i in this.list) {
cmp = this.list[i];
if (cmp.name == name) {
break;
}
}
return cmp;
}
}
叶子节点基本可以直接使用 Component 的结构,或是直接以 Component 来创建,Composite 树枝节点,就必须重写 Add , Remove, operate 等方法;使用方法:
var root = new Composite();
root.set("root");
//叶子
var leaf = new Leaf();
leaf.set('顶级叶子');
root.Add(leaf);
//树枝节点;
var child = new Composite();
child.set('child');
var childschild = new Composite();
childschild.set('cchild');
child.Add(childschild);
root.Add(child);
root.operate();
var root = new Composite();
root.set("root");
//叶子
var leaf = new Leaf();
leaf.set('顶级叶子');
root.Add(leaf);
//树枝节点;
var child = new Composite();
child.set('child');
var childschild = new Composite();
childschild.set('cchild');
child.Add(childschild);
root.Add(child);
root.operate();
其他说明组合模式,是一种结构型的设计模式,主要用于一致化处理简单元素和复杂元素操作,使得客户端使用可以与复合结构复杂的情况相解藕;客户端使用时,搜索递归到需要的节点或位置,都可以使用统一方法,不管是叶子节点或是树枝节点进行一致操作;在面向对象动态语言里,其实Javascript 也差不多,就可以无需知道元素结构,进行查询,添加,删除的操作;感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools./code/HtmlJsRun测试上述代码运行效果。在线HTML/CSS/JavaScript代码运行工具在线HTML/CSS/JavaScript代码运行工具http://tools./code/HtmlJsRun关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》javascript面向对象入门教程JavaScript错误与调试技巧总结JavaScript数据结构与算法技巧总结JavaScript遍历算法与技巧总结JavaScript数学运算用法总结希望本文所述对大家JavaScript程序设计有所帮助。