JavaScript设计模式-13.组合模式

时间:2021-12-14 16:51:03
 <!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Javascript高级语法13-组合模式</title>
</head>
<body>
<script>
/*组合模式:
*/ function demo1(){
/*需求: 有一个学校,有两个班(1班,2班),
* 每个班分两个小组(1班1组,1班2组,2班1组,2班2组)
* 学校计算机教室有限,每一个小组分着来上课,考试时候大家一起考
*/
//不用组合模式
var school = function(name){
this.name = name;
var classes = new Array();
this.addClass = function(cla){
classes.push(cla);
return this;
}
this.getClasses = function(){
return classes;
}
}
//班级类
var classes = function(name){
this.name = name;
var groups = new Array();
this.getGroups = function(){
return groups;
}
this.addGroup = function(group){
groups.push(group);
return this;
}
}
//组
var group = function(name){
this.name = name;
var students = new Array();
this.getStudents = function(){
return students;
}
this.addStudent = function(student){
students.push(student);
return this;
}
}
//学生类
var student = function(name){
this.name = name;
this.goToClass = function(){
document.write(this.name+" 去上课!")
}
this.finishClass = function(){
document.write(this.name+" 下课!")
}
}
//测试
var a = new student("a");
var b = new student("b");
var c = new student("c");
var d = new student("d");
var e = new student("e");
var f = new student("f");
var g = new student("g");
var h = new student("h");
var one = new classes("一班");
var oneOne = new group("一班一组");
oneOne.addStudent(a).addStudent(b);
var oneTwo = new group("一班二组");
oneTwo.addStudent(c).addStudent(d);
one.addGroup(oneOne).addGroup(oneTwo);
var two = new classes("二班");
var twoOne = new group("二班一组");
twoOne.addStudent(e).addStudent(f);
var twoTwo = new group("二班二组");
twoTwo.addStudent(g).addStudent(h);
two.addGroup(twoOne).addGroup(twoTwo);
var xuexiao = new school("新学校");
xuexiao.addClass(one).addClass(two); //调用 一班一组去上课
var classes = xuexiao.getClasses();
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].getGroups()[j].name == "一班一组"){
var s = classes[i].getGroups()[j].getStudents();
for(var k=0;k<s.length;k++){
s[k].goToClass();
}
}
}
}
}
//这种方法不适合业务扩展,效率非常低
}
// demo1();
/*组合模式:
* 1.组合模式中把对象分为两种(组合对象和叶子对象)
* 2.组合对象和叶子对象实现同一批操作
* 3.对组合对象执行的操作可以向下传递到叶子节点进行操作
* 4.这样就会弱化类与类之间的耦合
* 5.常用的手法就是把对象组合成属性结构的对象。
* 组合是离不开递归的。
*/ </script>
</body>
</html>

JavaScript设计模式-13.组合模式的更多相关文章

  1. JavaScript设计模式之----组合模式

    javascript设计模式之组合模式 介绍 组合模式是一种专门为创建Web上的动态用户界面而量身制定的模式.使用这种模式可以用一条命令在多个对象上激发复杂的或递归的行为.这可以简化粘合性代码,使其更 ...

  2. 再起航,我的学习笔记之JavaScript设计模式15&lpar;组合模式&rpar;

    组合模式 组合模式(Composite): 又称部分-整体模式,将对象组合成树形结构以表示"部分整体"的层次结构.组合模式使得用户对单个对象和组合对象的使用具有一致性. 如果有一个 ...

  3. JavaScript设计模式&lpar;5&rpar;-组合模式

    组合模式 1. 适合使用组合模式的条件: 存在一批组织成某种层次体系的对象,如树形结构(具体的结构在开发期间可能无法得知) 希望对这批对象或其中的一部分对象实施一个相同的操作 2. 注意点: 组合对象 ...

  4. JavaScript设计模式-14&period;组合模式实现

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. JS常用的设计模式&lpar;13&rpar;——组合模式

    组合模式又叫部分-整体模式,它将所有对象组合成树形结构.使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作. 一个再好不过的例子就是jquery对象,大家都知道1个jquery对象其实是一组 ...

  6. C&num;设计模式&lpar;10&rpar;——组合模式(Composite Pattern)

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...

  7. c&plus;&plus;设计模式15 --组合模式

    今天研究了一下设计模式15 组合模式 本人是菜鸟一枚,所以一开始完全不懂组合究竟是什么意思.先上图一张,树形结构图: 文档说,如果想做出这样的结构,通常考虑组合模式.那是为什么呢?现在让我们看一下组合 ...

  8. 乐在其中设计模式&lpar;C&num;&rpar; - 组合模式&lpar;Composite Pattern&rpar;

    原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...

  9. C&num;设计模式&lpar;10&rpar;——组合模式(Composite Pattern)(转)

    一.引言 在软件开发过程中,我们经常会遇到处理简单对象和复合对象的情况,例如对操作系统中目录的处理就是这样的一个例子,因为目录可以包括单独的文件,也可以包括文件夹,文件夹又是由文件组成的,由于简单对象 ...

随机推荐

  1. 虚拟化平台cloudstack(6)——使用maven&colon;jetty调试

    调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 apache ant JDK的配置和安装 安装可以参考: htt ...

  2. Gumby – 基于 Sass 的灵活的,响应式 CSS 框架

    Gumby 框架是一个基于 SASS 的灵活的,响应式的 CSS 框架.可以借助其灵活,响应式的网格系统和 UI 套件快速创建逻辑的页面布局和应用程序原型. 您可能感兴趣的相关文章 35个让人惊讶的 ...

  3. 大话设计模式C&plus;&plus;版——代理模式

    本篇开始前先发个福利,程杰的<大话设计模式>一书高清电子版(带目录)已上传至CSDN,免积分下载. 下载地址:http://download.csdn.net/detail/gufeng9 ...

  4. 测试驱动开发神器框架Mockito

    作为菜鸟的我,以前没接触过Mock类型的框架,比如说要测试action层,我总是从action层调用service再调用dao访问数据库,这种方式从原则上来说是无疑是非常正确的,在没用mock框架之前 ...

  5. 利用Linux系统生成随机密码的10种方法

    Linux操作系统的一大优点是对于同样一件事情,你可以使用高达数百种方法来实现它.例如,你可以通过数十种方法来生成随机密码.本文将介绍生成随机密码的十种方法. 1. 使用SHA算法来加密日期,并输出结 ...

  6. UVa816 Abbott&&num;39&semi;s Revenge

    Abbott's Revenge Time limit: 3.000 seconds Abbott’s Revenge  Abbott’s Revenge The 1999 World FinalsC ...

  7. PHP面向对象多态性的应用

    多态是面向对象的三大特性中除封装和继承之外的另一重要特性.它展现了动态绑定的功能,也称为“同名异式”.多态的功能可让软件在开发和维护时,达到充分的延伸性.事实上,多态最直接的定义是让具有继承关系的不同 ...

  8. 03 EditText文本编辑框

    二  EditText   文本编辑框  父类: TextView     >概念:文本编辑框  可以进行文本编辑         android:textColor="#00f&qu ...

  9. mysql进阶&lpar;七&rpar;limit的用法

    limit是mysql的语法 select * from table limit m,n 其中m是指记录开始的index,从0开始,表示第一条记录 n是指从第m+1条开始,取n条. select *  ...

  10. Python浅谈requests三方库

    requests 三方库用于获取URL资源 1.GET请求访问一个页面 import requests r = requests.get('https://www.cnblogs.com/xqxacm ...