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 相关文章推荐
Javascript延迟执行实现方法(setTimeout)
Dec 30 Javascript
jQuery中(function(){})()执行顺序的理解
Mar 05 Javascript
仿百度输入框智能提示的js代码
Aug 22 Javascript
js实现全屏漂浮广告移入光标停止移动
Dec 02 Javascript
jquery获取tagName再进行判断
May 29 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
js实现带农历和八字等信息的日历特效
May 16 Javascript
Angular排序实例详解
Jun 28 Javascript
解决koa2 ctx.render is not a function报错问题
Aug 07 Javascript
echarts多条折线图动态分层的实现方法
May 24 Javascript
微信小程序npm引入vant-weapp的踩坑记录
Aug 01 Javascript
移动端手指操控左右滑动的菜单
Sep 08 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 编程安全性小结
2010/01/08 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
php实现中文转数字
2016/02/18 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
php微信开发之谷歌测距
2018/06/14 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
学习vue.js计算属性
2016/12/03 Javascript
动态创建Angular组件实现popup弹窗功能
2017/09/15 Javascript
highcharts 在angular中的使用示例代码
2017/09/20 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
小程序的上传文件接口的注意要点解析
2019/09/17 Javascript
Vue Render函数原理及代码实例解析
2020/07/30 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
vue调用微信JSDK 扫一扫,相册等需要注意的事项
2021/01/03 Vue.js
Python使用plotly绘制数据图表的方法
2017/07/18 Python
Python生成数字图片代码分享
2017/10/31 Python
python 格式化输出百分号的方法
2019/01/20 Python
python3 pygame实现接小球游戏
2019/05/14 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
对Python中 \r, \n, \r\n的彻底理解
2020/03/06 Python
win10安装python3.6的常见问题
2020/07/01 Python
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
《这儿真好》教学反思
2014/02/22 职场文书
技校学生个人职业生涯规划范文
2014/03/03 职场文书
合作协议书模板
2014/10/10 职场文书
python神经网络 使用Keras构建RNN训练
2022/05/04 Python
使用pd.merge表连接出现多余行的问题解决
2022/06/16 Python