组合模式(一)

  • 组合模式是一种专门为创建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();
         }
       }
     }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值