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 读取图片文件的大小
Jun 25 Javascript
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
jquery 触发a链接点击事件解决方案
May 02 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
Mar 05 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
jquery提示效果实例分析
Nov 25 Javascript
node.js中的console.error方法使用说明
Dec 10 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
Mar 12 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
实例讲解JavaScript中instanceof运算符的用法
Jun 08 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
详解Vue的列表渲染
Nov 20 Vue.js
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中ob(Output Buffer 输出缓冲)函数使用方法
2007/07/21 PHP
js的toUpperCase方法用法实例
2015/01/27 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
vue mixins组件复用的几种方式(小结)
2017/09/06 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
vue项目开发中setTimeout等定时器的管理问题
2018/09/13 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
使用vue实现通过变量动态拼接url
2020/07/22 Javascript
python多进程操作实例
2014/11/21 Python
Python计算程序运行时间的方法
2014/12/13 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
如何使用Flask-Migrate拓展数据库表结构
2019/07/24 Python
Flask框架学习笔记之消息提示与异常处理操作详解
2019/08/15 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
详解Python3中的 input() 函数
2020/03/18 Python
css3 transform过渡抖动问题解决
2020/10/23 HTML / CSS
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
介绍一下MYSQL常用的优化技巧
2012/10/25 面试题
创伤外科专业推荐信范文
2013/11/19 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
学习自我鉴定
2014/02/01 职场文书
我的中国梦演讲稿400字
2014/08/19 职场文书
通知书大全
2015/04/27 职场文书
学雷锋献爱心倡议书
2015/04/27 职场文书
生日宴会祝酒词
2015/08/10 职场文书
预备党员表决心的话
2015/09/22 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
如何在Python项目中引入日志
2021/05/31 Python
德生2P3收音机开箱评测
2022/04/30 无线电