JavaScript组合模式---引入案例分析


Posted in Javascript onMay 23, 2020

本文实例讲述了JavaScript组合模式。分享给大家供大家参考,具体如下:

首先:

使用一个例子来引入组合模式,需求为
(1)有一个学校有2个班(一班,二班)
(2)每个班级分2个小组(一班一组,一班二组,二班一组,二班二组)
(3)学校计算机教室有限,每一个小组分着来上课

然后:根据需求我们可以简单看出这里面涉及到   学校,班级,组,和学生总共4个类

使用程序模拟  这4个类为,

(1)学校类

var school=function (name) {
  this.name=name;
  var classes=new Array();
   this.addClasses=function (cla) {
   classes.push(classe);
   }
   this.getClass=function () {
    return classes;
   }
 }

(2)班级类

//班级类
 var classes=function (name) {
  this.name = name;
  var groups = new Array();
  this.addGroup = function (group) {
   groups.push(group);
   return this;
  };
  this.getGroups = function () {
   return groups;
  }
 };

(3)组类

//组
 var group=function (name) {
  this.name=name;
  var students=new Array();
  var addStudents=function (student) {
   students.push(student);
   return this;
  }
   this.geStudent=function () {
    return students;
   }
 };

(4)学生类

//学生类
  var student=function (name) {
   this.name=name;
   this.gotoClass=function () {
    document.write(name+":我是学生,我要去上课 ")
   };
   this.finishClass=function () {
    document.write(name+": 终于下课了");
   }
  };

其次,测试需满足如下为:

(1)每个班级分2个小组(一班一组,一班二组,二班一组,二班二组)
(2)学校计算机教室有限,每一个小组的学生分着来上课
(3)现在我们倒着写,从学生-->组->班级-->学校

//学生实例
 var astudent=new student("我是a同学");
 var bstudent=new student("我是b同学");
 var cstudent=new student("我是c同学");
 var dstudent=new student("我是d同学");
 var estudent=new student("我是e同学");
 var fstudent=new student("我是f同学");
 var gstudent=new student("我是g同学");
 var hstudent=new student("我是h同学");
 var istudent=new student("我是i同学");

//班级实例(1)
  var class1=new classes("一班");
  //组1
 var oneOne=new group("一班一组");
  //组中添加学生
 oneOne.addStudents(astudent).addStudents(bstudent);
 //组2
 var oneTwo=new group("一班二组");
 //组中添加学生
 oneTwo.addStudents(cstudent).addStudents(dstudent);

 class1.addGroup(oneOne).addGroup(oneTwo);
 //班级实例2
 var class2=new classes("二班");
 //组1
 var towOne=new group("二班一组");
 //组中添加学生
 towOne.addStudents(estudent).addStudents(fstudent);

 //组2
 var towTwo=new group("二班二组");
 //组中添加学生
 towTwo.addStudents(gstudent).addStudents(hstudent).addStudents(istudent);
 //
 class2.addGroup(towOne).addGroup(towTwo);

 //学校实例
 var usSchool=new school("组合模式学校");

最后,开学了,我们准备按照要求去上课吧,

安排为:一班一组去上课 学校-->班级-->组-->学生

var classes=usSchool.getClass();//班级
  for(var i=0;i<classes.length;i++){
   if(classes[i].name=="一班"){
    for(var j=0;j<classes[i].getGroups().length;j++){
     if(classes[i].classes[i].getGroups()[j]=="一组"){
      var students=classes[i].classes[i].getGroups()[j].geStudent();
      for(var k=0;k<students.length;k++){
       students[k].gotoClass();
      }
     }
    }
   }
  }

最后,我只是想安排一个都要写这么多的代码,那如何是一个学校有上千个班级,那么要疯了。

这种一定不适合业务的扩展,为此我们使用组合模式来解决上述的问题。
为啥要用设计模式呢?
因为设计模式有如下的一些操作方式:
(1)组合模式中把对象分为两种(组合对象,和叶子对象)
(2)组合对象和叶子对象实现:同一批操作
(3)对组合对象执行的操作可以向下传递到叶子节点进行操作
(4)这样就会弱化类与类之间的耦合
(5)他常用的手法是把对象组合成属性结构的对象

接下来介绍:JavaScript组合设模式--改进上述引入的例子

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JS 遮照层实现代码
Mar 31 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
Jun 20 Javascript
js比较和逻辑运算符的介绍
Mar 10 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
Mar 21 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
jquery ajax中使用jsonp的限制解决方法
Nov 22 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
Jan 18 Javascript
微信小程序Redux绑定实例详解
Jun 07 Javascript
使用JavaScript进行表单校验功能
Aug 01 Javascript
javascript性能优化之分时函数的介绍
Mar 28 Javascript
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
May 21 Javascript
JavaScript设计模式--桥梁模式引入操作实例分析
May 23 #Javascript
JavaScript设计模式--简单工厂模式实例分析【XHR工厂案例】
May 23 #Javascript
JavaScript设计模式--简单工厂模式定义与应用案例详解
May 23 #Javascript
基于element-ui封装可搜索的懒加载tree组件的实现
May 22 #Javascript
微信小程序点击滚动到指定位置的实现
May 22 #Javascript
使用JavaScript通过前端发送电子邮件
May 22 #Javascript
uni-app微信小程序登录授权的实现
May 22 #Javascript
You might like
php选择排序法实现数组排序实例分析
2015/02/16 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
PHP实现的登录页面信息提示功能示例
2017/07/24 PHP
你真的了解JavaScript吗?
2007/02/24 Javascript
基于KMP算法JavaScript的实现方法分析
2013/05/03 Javascript
js处理自己不能定义二维数组的方法详解
2014/03/03 Javascript
js 获取元素下面所有li的两种方法
2014/04/14 Javascript
微信WeixinJSBridge API使用实例
2015/05/25 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
JavaScript函数柯里化原理与用法分析
2017/03/31 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
JS实现的缓冲运动效果示例
2018/04/30 Javascript
浅谈vue项目如何打包扔向服务器
2018/05/08 Javascript
vue-cli 使用axios的操作方法及整合axios的多种方法
2018/09/12 Javascript
Python中的zipfile模块使用详解
2015/06/25 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
Python检查ping终端的方法
2019/01/26 Python
python安装gdal的两种方法
2019/10/29 Python
python 下载文件的多种方法汇总
2020/11/17 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
Nike爱尔兰官方网站:Nike.com (IE)
2018/03/12 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
运动会跳远广播稿
2014/02/04 职场文书
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
2014党员学习习主席讲话思想汇报
2014/09/15 职场文书
学校政风行风评议工作总结
2014/10/21 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
领导欢送会主持词
2015/07/06 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
python绘制云雨图raincloud plot
2022/08/05 Python