js设计模式-组合模式
组合模式是一种专为创建web上的动态用户界面而量身定制的模式。使用这种模式,可以用一条命令在多个对象上激发复杂的或递归的行为。这可以简化粘合性代码,使其更容易维护,而那些复杂行为则被委托给各个对象。
组合模式实例:图片库
1 /** 2 * 图片库 3 */ 4 var Composite = new Interface("Composite",["add","remove","getChild"]); 5 var GalleryItem = new Interface("GalleryItem",["hide","show"]); 6 7 //DynamicGallery class 8 9 var DynamicGallery = function(id){ 10 this.children = []; 11 12 this.element = document.createElement("div"); 13 this.element.id = id; 14 this.element.className = "dynamic-gallery"; 15 } 16 17 DynamicGallery.prototype = { 18 add:function(child){ 19 Interface.ensureImplements(child,Composite,GalleryItem); 20 this.children.push(child); 21 this.element.appendChild(child.getElement()); 22 }, 23 remove:function(child){ 24 for(var i =0, node; node = this.getChild(i);i++){ 25 if(node == child){ 26 this.children.splice(i,1); 27 break; 28 } 29 } 30 this.element.removeChild(child.getElement()); 31 }, 32 getChild:function(i){ 33 return this.children[i]; 34 }, 35 // Implemetn the GalleryItem interface 36 hide:function(){ 37 for(var node, i =0; node = this.getChild(i);i++){ 38 node.hide(); 39 } 40 this.element.style.display = "none"; 41 }, 42 show:function(){ 43 this.element.style.display = "block"; 44 for(var node, i =0; node = this.getChild(i);i++){ 45 node.show(); 46 } 47 }, 48 getElement:function(){ 49 return this.element ; 50 } 51 } 52 53 //GalleryImage class. 54 55 var GalleryImage = function(src){ 56 this.element = document.createElement("img"); 57 this.element.className = "gallery-image"; 58 this.element.src =src; 59 } 60 61 GalleryImage.prototype = { 62 add:function(){}, 63 remove:function(){}, 64 getChild:function(){}, 65 hide:function(){ 66 this.element.style.display = "none"; 67 }, 68 show:function(){ 69 this.element.style.display = ""; 70 }, 71 72 getElement:function(){ 73 return this.element; 74 } 75 };
View Code
应用:
<!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>
结果:
转载于:https://www.cnblogs.com/tengri/p/5348073.html
js设计模式-组合模式相关推荐
- JS设计模式--组合模式
JS设计模式–组合模式 昨天学习了白贺翔老师的JS组合模式,现在把我学到的分享出来叭O(∩_∩)O,直接看下面代码 <!DOCTYPE html> <html lang=" ...
- js设计模式——组合模式
组合模式将对象组合成树形结构,以表示"部分-整体"的层次结构.除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,是的用户对单个对象和组合对象的使用具有一致性. ...
- 设计模式---组合模式
设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...
- Java设计模式 —— 组合模式(Composite)
Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...
- 设计模式----组合模式UML和实现代码
2019独角兽企业重金招聘Python工程师标准>>> 一.什么是组合模式? 组合模式(Composite)定义:将对象组合成树形结构以表示'部分---整体'的层次结构.组合模式使得 ...
- javascript设计模式-组合模式
1 <!DOCTYPE HTML> 2 <html lang="en-US"> 3 <head> 4 <meta charset=&quo ...
- 大话设计模式—组合模式
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...
- java设计模式 组合_JAVA 设计模式 组合模式
用途组合模式 (Component) 将对象组合成树形结构以表示"部分-整体"的层次结构. 组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构 ...
- Java常用设计模式————组合模式
引言 组合模式,是一种类似递归算法的结构性设计模式,通过以简单的 List ,组合本类对象,实现树状对象结构的"部分.整体"的层次. 它可以让调用程序不需要关心复杂对象与简单对象的 ...
最新文章
- asp.net webform 复制窗体代码_逆向分析流氓软件自我复制以及防御思路
- 关于滴滴智能调度的分析和思考
- SQLSERVER中统计所有表的记录数
- MFC中如何给对话框添加背景图片
- (王道408考研数据结构)第五章树-第四节4:红黑树基本概念及操作
- 【华为云专家技术公开课】7月4日直播,报名观看赢取好礼
- mysql cache lock_MySQL:query cache lock
- VueRouter(记录)
- c# mysql 汉字乱码_c#+mysql 中文乱码
- VS2017下载地址
- oracle if语句使用方法,Oracle IF语句的使用
- 明翰英语教学系列之句法篇V0.6(持续更新)
- [走过的路]联想时光——人艰不拆(店员篇+推销员篇)
- 远程桌面由于以下原因之一无法连接到远程计算机解决方法(亲测)
- php phalapi,[6.3]-SDK包(PHP版) | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
- java和ssm开发的医院体检预约系统有论文
- 数组的下标访问和指针访问方式效率分析比较
- Python数据分析与展示——Pandas基本操作
- 从安装包中提取wear OS手表端应用
- Python实现天气查询功能(外加Excel技巧)
热门文章
- win2003配置apache2.2下,php页面出现乱码的解决方法
- Android小项目源码汇总
- linux 知识点 随笔
- rfcomm工具的使用方法 创建/dev/rfcomm0 并检测
- 41 | 案例篇:如何优化 NAT 性能?(上)
- 38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
- python中webdriver_浅谈python中selenium库调动webdriver驱动浏览器的实现原理
- 1598: TomCat的环(快速幂+染色问题)
- mysql2012更改表名_SQL修改数据库名字、表名字、字段名字 | 学步园
- Dubbo 版 Swagger 来啦!