- 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式。使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为。这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象。
- 组合模式的好处:
- 1 你可以用同样的方法处理对象的集合与其中的特定子对象。
- 2 它可以用来把一批子对象组织成树形结构,并且使整棵树都可以被遍历。
/*
* 场景模拟:
* -> 公司
* -> 财务部门
* -> 张一
* -> 张二
* -> 张三
* -> 销售部门
* -> 张四
* -> 张五
* -> 张六
*
* 实际的任务具体是落实到人上去实施的 也就是说只有人才具有具体的方法实现
*
*/
//公司
var Org = function(name){
this.name = name;
this.depts = [];
};
Org.prototype = {
constructor : Org,
addDepts : function(child){
this.depts.push(child);
return this;
},
getDepts : function(){
return this.depts;
}
};
//部门
var Dept = function(name){
this.name = name;
this.presons = [];
};
Dept.prototype = {
constructor : Dept,
addPersons : function(child){
this.presons.push(child);
return this;
},
getPersons : function(child){
return this.presons;
}
}
//员工
var Person = function(name){
this.name = name;
}
Person.prototype = {
constructor : Person,
hardworking : function(){
console.log(this.name + '努力工作....');
},
sleeping : function(){
console.log(this.name + '努力睡觉....');
}
};
var p1 = new Person('张1');
var p2 = new Person('张2');
var p3 = new Person('张3');
var p4 = new Person('张4');
var p5 = new Person('张5');
var p6 = new Person('张6');
var dept1 = new Dept('开发部门');
dept1.addPersons(p1).addPersons(p2).addPersons(p3);
var dept2 = new Dept('销售部门');
dept2.addPersons(p4).addPersons(p5).addPersons(p6);
var org = new Org('It');
org.addDepts(dept1).addDepts(dept2);
org.hardworking('开发部门');
for(var i=0, depts = org.getDepts(); i<depts.length; i++){
for(var j=0, persons = depts[i].getPersons(); j<persons.length; i++){
if(persons[j].name === '张6'){
persons[j].hardworking();
}
}
}