组合模式是一种专为创建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. js-事件处理(重点)

    1:各种常用事件: 2:简单用法: <body onLoad="javascript:alert('hello world');" onUnload="javasc ...

  2. 【PL/SQL】匿名块、存储过程、函数、触发器

    名词解释 子程序:PL/SQL的过程和函数统称为子程序. 匿名块:以DECLARE或BEGIN开始,每次提交都被编译.匿名块因为没有名称,所以不能在数据库中存储并且不能直接从其他PL/SQL块中调用. ...

  3. 【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND

    INTERVAL YEAR TO MONTH: 作为年和月的时间间隔存储 INTERVAL DAY TO SECOND: 作为天.小时.分和秒的时间间隔存储(DAY,HOUR,MINUTE,SECON ...

  4. selenium选错弹出层的下拉框

    要先选中这个弹出层的form元素,再找下拉框 public void downSelectBox(){ driver.get("https://www.imooc.com/user/setp ...

  5. c#同步锁Monitor.Enter(T)

    protected static object MObjLock = new object();//同步锁 public string GetData(int mId) { Monitor.Enter ...

  6. change project compliance and jre to 1.5

    这个主要检查一下几点 项目的jdk为1.7 java版本设置为1.7 java compiler 的页面设置为以下,并且去掉勾选java compiler 下面的 enableproject spec ...

  7. H5-data属性的一个问题

    关于前端存数据的问题,前面写过一个博客:前端页面存取数据 看个例子: <!DOCTYPE html> <html lang="en"> <head&g ...

  8. XML的解析方式

    //解析和输出XML public void showXml() { string filepath = Application.dataPath + @"/my.xml"; if ...

  9. HDU1850 - Being a Good Boy in Spring Festival 【尼姆博弈】

    一年在外 父母时刻牵挂  春节回家 你能做几天好孩子吗  寒假里尝试做做下面的事情吧  陪妈妈逛一次菜场  悄悄给爸爸买个小礼物  主动地 强烈地 要求洗一次碗  某一天早起 给爸妈用心地做回早餐  ...

  10. nyoj169-素数

    ms  |  内存限制:65535 KB 难度:1 描述 走进世博园某信息通信馆,参观者将获得前所未有的尖端互动体验,一场充满创想和喜悦的信息通信互动体验秀将以全新形式呈现,从观众踏入展馆的第一步起, ...