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 url传值中文乱码之解决之道
Nov 20 Javascript
jQuery Dialog 弹出层对话框插件
Aug 09 Javascript
打造基于jQuery的高性能TreeView(asp.net)
Feb 23 Javascript
有关JavaScript的10个怪癖和秘密分享
Aug 28 Javascript
深入理解javaScript中的事件驱动
May 21 Javascript
js模仿java的Map集合详解
Jan 06 Javascript
vue,angular,avalon这三种MVVM框架优缺点
Apr 27 Javascript
浅谈JavaScript中小数和大整数的精度丢失
May 31 Javascript
vue拦截器Vue.http.interceptors.push使用详解
Apr 22 Javascript
vue组件(全局,局部,动态加载组件)
Sep 02 Javascript
vue中axios请求的封装实例代码
Mar 23 Javascript
vue父子组件间引用之$parent、$children
May 20 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
PHP6 先修班 JSON实例代码
2008/08/23 PHP
php搜索文件程序分享
2015/10/30 PHP
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
理解javascript中try...catch...finally
2015/12/25 Javascript
jQuery实现打开页面渐现效果示例
2016/07/27 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
实例解析jQuery工具函数
2016/12/01 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
Node 升级到最新稳定版的方法分享
2018/05/17 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
微信小程序第三方框架对比 之 wepy / mpvue / taro
2019/04/10 Javascript
微信小程序:数据存储、传值、取值详解
2019/05/07 Javascript
微信小程序缓存过期时间的使用详情
2019/05/12 Javascript
Smartour 让网页导览变得更简单(推荐)
2019/07/19 Javascript
Element Carousel 走马灯的具体实现
2020/07/26 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
Python 高级专用类方法的实例详解
2017/09/11 Python
什么是python类属性
2020/06/10 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
python绘制雷达图实例讲解
2021/01/03 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
python实现图片转字符画
2021/02/19 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
BIBLOO波兰:捷克的一家在线服装店
2018/03/09 全球购物
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
机械化及自动化毕业生的自我评价分享
2013/11/06 职场文书
应用心理学个人求职信范文
2013/12/11 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
先进工作者个人总结
2015/02/15 职场文书
门店店长岗位职责
2015/04/14 职场文书
PHP策略模式写法
2021/04/01 PHP