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高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
javascript变量声明实例分析
Apr 25 Javascript
理解和运用JavaScript的闭包机制
Aug 13 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
一个例子轻松学会Vue.js
Jan 02 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
Jan 05 Javascript
Jquery鼠标放上去显示全名的实现方法
Feb 06 Javascript
JAVA中截取字符串substring用法详解
Apr 14 Javascript
一个Vue页面的内存泄露分析详解
Jun 25 Javascript
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
jquery使用echarts实现有向图可视化功能示例
Nov 25 jQuery
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 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 获取select下拉列表框的值
2010/05/08 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
用Simple Excel导出xls实现方法
2012/12/06 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
分享常见的几种页面静态化的方法
2015/01/08 PHP
php数组索引与键值操作技巧实例分析
2015/06/24 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
javascript事件模型代码
2007/07/01 Javascript
(jQuery,mootools,dojo)使用适合自己的编程别名命名
2010/09/14 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
获取jqGrid中选择的行的数据
2016/11/30 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
wxPython事件驱动实例详解
2014/09/28 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
python3实现基于用户的协同过滤
2018/05/31 Python
python将回车作为输入内容的实例
2018/06/23 Python
python的mysql数据库建立表与插入数据操作示例
2019/09/30 Python
python实现输出一个序列的所有子序列示例
2019/11/18 Python
selenium+python配置chrome浏览器的选项的实现
2020/03/18 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
Python利用matplotlib绘制折线图的新手教程
2020/11/05 Python
日本乐天官方海外转运服务:Rakuten Global Express
2018/11/30 全球购物
机械个人求职信范文
2014/01/24 职场文书
广告宣传策划方案
2014/05/21 职场文书
服装发布会策划方案
2014/05/22 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
高校自主招生自荐信2015
2015/03/04 职场文书
读书笔记怎么写
2015/07/01 职场文书
2021年最新用于图像处理的Python库总结
2021/06/15 Python
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python