《javascript设计模式》学习笔记七:javascript面向对象程序设计组合模式详解

  

本文实例讲述了Javascript面向对象程序设计组合模式。分享给大家供大家参考,具体如下:

  

  

关于组合模式的定义:组合模式(复合模式)有时候又叫做部分——整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。来自百度百科:http://baike.baidu.com/view/3591789.htm

  

其实从面向对象之五之后,与javascript本身关系不是很大,更重要的是设计模式的一些概念,只要了解javascript面向对象的一般知识,掌握设计模式的含义,代码本身并不是很难。

  

这里简单说一下组合模式,其实组合模式就是将一系列相似或相近的对象组合在一个大的对象,由这个大对象提供一些常用的接口来对这些小对象进行操作,代码可重用,对外操作简单,例如对于一个表单里的元素,不考虑页面设计的情况下,一般就剩下输入了,对于这些输入都有名称和值的属性,因此可以将这些输入元素作为形式对象的成员组合起来,形成对象提供对外的接口,便可以实现一些简单的操作,比如设置某个输入的值,添加/删除某个输入等等……

  

  

<强>介绍:强组合模式又叫部分整体模式,用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次

  

<强>定义:强组合多个对象形成树形结构以表示具有整体一部分关系的层次机构。组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性,组合模式又可以成为整体一部分模式。
  它是一种对象结构型模式。

  

<>强场景:我们对公司的人员架构进行一下打印,假设所有管理岗和开发岗的区别只有一个,是不是有下级员工。我们来实现下:

  

<强>示例:

        var领袖=函数(名称、部门){   这一点。_name=名字| |”;//姓名   这一点。_dept=部门| |”;//职位   这一点。_subordinates=[];//下属      这一点。添加=function(员工){   this._subordinates.push(员工);   }      这一点。删除=函数(员工){   this._subordinates.splice (this._subordinates.indexOf(员工),1);   }      这一点。getSubordinates=function () {   返回this._subordinates;   }   这一点。toString=function () {   console.log(“姓名:“+ this._name +”,职位:' + this._dept)   }   }   var JAVARD=函数(名称、部门){   这一点。_name=名字| |”;//姓名   这一点。_dept=部门| |”;//职位      这一点。toString=function () {   console.log(“姓名:“+ this._name +”,职位:' + this._dept)   }   }      var FERD=函数(名称、部门){   这一点。_name=名字| |”;//姓名   这一点。_dept=部门| |”;//职位   这一点。toString=function () {   console.log(“姓名:“+ this._name +”,职位:' + this._dept)   }   }      函数addData () {   var CEO=新领导人(“spancer”、“首席执行官”);      var CTO=新领导人(“子健”、“首席技术官”);      var经理=新领导人(“江”、“领袖”);      var JAVA_LEADER=新领导人(“范”,“JAVA_LEADER”);   var FE_LEADER=新领导人(“冒险者”,“FE_LEADER”);      var wh=new FERD (“wanghui”、“铁”);   var si=new FERD(‘如果’,‘铁’);   艾米var=new FERD(“艾米”、“铁”);      魏var=new JAVARD(“魏”,“JAVA”);   郭var=new JAVARD(“郭”,“JAVA”);   var元=new JAVARD(“元”,“JAVA”);      CEO.add(首席技术官);      CTO.add(经理);      MANAGER.add (JAVA_LEADER);   MANAGER.add (FE_LEADER);      FE_LEADER.add (wh);   FE_LEADER.add (si);   FE_LEADER.add(艾米);      JAVA_LEADER.add(魏);   JAVA_LEADER.add(郭);   JAVA_LEADER.add(元);   返回首席执行官;   }   var eachEmployee=函数(员工){   (var雇佣的employee.getSubordinates ()) {   employ.toString ();   如果使用。getSubordinates,,employ.getSubordinates ()。长度比;0){   eachEmployee(使用);   }   }   }      var=CEO addData ();   CEO.toString ();   eachEmployee (CEO);//姓名:spancer职位:CEO//姓名:子健,职位:首席技术官//姓名:江、职位:领袖//姓名:范,职位:JAVA_LEADER//姓名:魏,职位:JAVA//姓名:郭,职位:JAVA//姓名:元,职位:JAVA//姓名:冒险者,职位:FE_LEADER//姓名:wanghui职位:铁//姓名:si,职位:铁//姓名:艾米,职位:铁

《javascript设计模式》学习笔记七:javascript面向对象程序设计组合模式详解