组合模式是一种专为创建web上的动态用户界面而量身定制的模式。使用这种模式,可以用一条命令在多个对象上激发复杂的或递归的行为。这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象。

组合模式实例:图片库

 /**
* 图片库
*/
var Composite = new Interface("Composite",["add","remove","getChild"]);
var GalleryItem = new Interface("GalleryItem",["hide","show"]); //DynamicGallery class var DynamicGallery = function(id){
this.children = []; this.element = document.createElement("div");
this.element.id = id;
this.element.className = "dynamic-gallery";
} DynamicGallery.prototype = {
add:function(child){
Interface.ensureImplements(child,Composite,GalleryItem);
this.children.push(child);
this.element.appendChild(child.getElement());
},
remove:function(child){
for(var i =0, node; node = this.getChild(i);i++){
if(node == child){
this.children.splice(i,1);
break;
}
}
this.element.removeChild(child.getElement());
},
getChild:function(i){
return this.children[i];
},
// Implemetn the GalleryItem interface
hide:function(){
for(var node, i =0; node = this.getChild(i);i++){
node.hide();
}
this.element.style.display = "none";
},
show:function(){
this.element.style.display = "block";
for(var node, i =0; node = this.getChild(i);i++){
node.show();
}
},
getElement:function(){
return this.element ;
}
} //GalleryImage class. var GalleryImage = function(src){
this.element = document.createElement("img");
this.element.className = "gallery-image";
this.element.src =src;
} GalleryImage.prototype = {
add:function(){},
remove:function(){},
getChild:function(){},
hide:function(){
this.element.style.display = "none";
},
show:function(){
this.element.style.display = "";
}, getElement:function(){
return this.element;
}
};

应用:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="img"></div>
</body>
</html>
<script type="text/javascript" src="Interface.js"></script>
<script type="text/javascript" src="ImageLibs.js"></script>
<script type="text/javascript"> var topGallery = new DynamicGallery("top-gallery");
topGallery.add(new GalleryImage("../img/dog/0.jpg"));
topGallery.add(new GalleryImage("../img/dog/1.jpg"));
topGallery.add(new GalleryImage("..//img/dog/2.jpg"));
topGallery.add(new GalleryImage("../img/dog/3.jpg")); var vacationPhotos = new DynamicGallery("vacation-photos");
for(var i = 0 ; i< 5;i++){
vacationPhotos.add(new GalleryImage("../img/photo/" + i + ".jpg"));
} topGallery.add(vacationPhotos);
topGallery.show();
// vacationPhotos.hide();
console.log(topGallery); document.getElementById("img").appendChild(topGallery.element); topGallery.getChild(2).element.style.border = "2px solid red"; </script>

结果:

js设计模式-组合模式的更多相关文章

  1. 16. 星际争霸之php设计模式--组合模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. Java设计模式——组合模式

    JAVA 设计模式 组合模式 用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模 ...

  3. 【设计模式】Java设计模式 - 组合模式

    Java设计模式 - 组合模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 原创作品,更多关注我CSDN: 一个有梦有戏的人 准备将博客园.CSDN一起记录分享自己 ...

  4. javascript设计模式-组合模式

    组合模式所要解决的问题: 可以使用简单的对象组合成复杂的对象,而这个复杂对象有可以组合成更大的对象.可以把简单这些对象定义成类,然后定义一些容器类来存储这些简单对象. 客户端代码必须区别对象简单对象和 ...

  5. javascript设计模式——组合模式

    前面的话 在程序设计中,有一些和“事物是由相似的子事物构成”类似的思想.组合模式就是用小的子对象来构建更大的对象,而这些小的子对象本身也许是由更小的“孙对象”构成的.本文将详细介绍组合模式 宏命令 宏 ...

  6. c#设计模式-组合模式

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

  7. [Head First设计模式]生活中学设计模式——组合模式

    系列文章 [Head First设计模式]山西面馆中的设计模式——装饰者模式 [Head First设计模式]山西面馆中的设计模式——观察者模式 [Head First设计模式]山西面馆中的设计模式— ...

  8. JAVA 设计模式 组合模式

    用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构

  9. 设计模式组合模式(Composite)精华

    23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助如何创建一个系统独立.这是一个这些对象和陈述的组合. 创建使用继承类的类架构更改实例.的对象类型模型的建 ...

随机推荐

  1. windows server 2012 r2 安装无法找到install.wim 错误代码0x80070026,以及制作U启动盘决解ISO文件超过5G大小限制的解决方案(转)

    戴尔服务器r530 windows server 2012 r2 安装无法找到install.wim 错误代码0x80070026,以及制作U启动盘决解ISO文件超过5G大小限制的解决方案 关于在服务 ...

  2. 安卓代码迁移:Program "sh" not found in PATH

    Description    Resource    Path    Location    Type  Program  "sh"  not  found in PATH 参考链 ...

  3. Redis 通用key操作命令

    1.在redis里面允许模糊查询key,有3个通配符:*,?,[]. *:通配任意字符 ?:通配单个字符 []:通配中括号内的某个字符 例如: 2.randomKey 随机返回所有key中的某个 3. ...

  4. 学习网址Collect

    Laravel 学院    https://laravelacademy.org/wx小程序 https://developers.weixin.qq.com/miniprogram/dev/quic ...

  5. python时间序列按频率生成日期

    有时候我们的数据是按某个频率收集的,比如每日.每月.每15分钟,那么我们怎么产生对应频率的索引呢?pandas中的date_range可用于生成指定长度的DatetimeIndex.我们先看一下怎么生 ...

  6. elasticsearch重建索引

    1.重建索引 一个field的设置是不能被修改的,如果要修改一个Field,那么应该重新按照新的mapping,建立一个index,然后将数据批量查询出来,重新用bulk api写入index中 批量 ...

  7. Day 2 语言元素

    1.变量和类型 在程序设计中,变量是一种存储数据的载体.计算机中的变量是实际存在的数据或者说是存储器中存储数据的一块内存空间,变量的值可以被读取和修改,这是所有计算和控制的基础.计算机能处理的数据有很 ...

  8. mysql字符集和排序规则

    1.关于字符集和排序规则所为字符集,就是用来定义字符在数据库中的编码的集合.常见的字符集有:utf8(支持中文)和AccIS(不支持中文) 数据库中的排序规则用来定义字符在进行排序和比较的时候的一种规 ...

  9. c# 数组 字符串 C#中判断字符串中包含某个字符

    string str = "1,2,3,4,5,6,7";            string[] strArray = str.Split(','); //字符串转数组      ...

  10. IT培训机构的招生诈骗大曝光

    作者曾在某知名IT培训机构工作过,目睹了招生欺诈,后来作者果断辞职,不能为奸商工作,助纣为虐,在此曝光,以免学生的血汗钱白交.社会上的IT培训机构手法大都一样,奸商都是有套路的.X大青鸟,X内外企IT ...