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中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
JavaScript的jQuery库插件的简要开发指南
Aug 12 Javascript
JavaScript对象数组排序函数及六个用法
Dec 23 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
Jan 06 Javascript
js中最容易被忽视的事件问题大总结
May 15 Javascript
js检查是否关闭浏览器的方法
Aug 02 Javascript
微信小程序 弹窗自定义实例代码
Mar 08 Javascript
ionic+html5+API实现双击返回键退出应用
Sep 17 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
Mar 01 Vue.js
面试中canvas绘制图片模糊图片问题处理
Mar 13 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中数据的批量导入(csv文件)
2006/10/09 PHP
打造超酷的PHP数据饼图效果实现代码
2011/11/23 PHP
php创建sprite
2014/02/11 PHP
laravel5.4生成验证码的实例讲解
2017/08/05 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
JQuery入门——用映射方式绑定不同事件应用示例
2013/02/05 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
详解AngularJS Filter(过滤器)用法
2015/12/28 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
微信小程序-消息提示框实例
2016/11/24 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
Openlayers显示瓦片网格信息的方法
2020/09/28 Javascript
vue+iview分页组件的封装
2020/11/17 Vue.js
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
[46:27]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第一局
2016/03/02 DOTA
Python Socket编程详细介绍
2017/03/23 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
Python2与Python3的区别实例分析
2019/04/11 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
Python (Win)readline和tab补全的安装方法
2019/08/27 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
pandas将list数据拆分成行或列的实现
2020/12/13 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
流行文化收藏品:Sideshow(DC漫画,星球大战,漫威)
2019/03/17 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
《鸿门宴》教学反思
2014/04/22 职场文书
篮球社团活动总结
2014/06/27 职场文书
跑吧孩子观后感
2015/06/10 职场文书
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
mysql中数据库覆盖导入的几种方式总结
2022/03/25 MySQL