组合模式是一种专为创建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设计模式-组合模式相关推荐

  1. JS设计模式--组合模式

    JS设计模式–组合模式 昨天学习了白贺翔老师的JS组合模式,现在把我学到的分享出来叭O(∩_∩)O,直接看下面代码 <!DOCTYPE html> <html lang=" ...

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

    组合模式将对象组合成树形结构,以表示"部分-整体"的层次结构.除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,是的用户对单个对象和组合对象的使用具有一致性. ...

  3. 设计模式---组合模式

    设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...

  4. Java设计模式 —— 组合模式(Composite)

    Java设计模式 -- 组合模式(Composite) 定义 Composite,组合模式:将对象组合成树形结构以表示部分整体的关系,Composite使得用户对单个对象和组合对象的使用具有一致性. ...

  5. 设计模式----组合模式UML和实现代码

    2019独角兽企业重金招聘Python工程师标准>>> 一.什么是组合模式? 组合模式(Composite)定义:将对象组合成树形结构以表示'部分---整体'的层次结构.组合模式使得 ...

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

    1 <!DOCTYPE HTML> 2 <html lang="en-US"> 3 <head> 4 <meta charset=&quo ...

  7. 大话设计模式—组合模式

    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式, ...

  8. java设计模式 组合_JAVA 设计模式 组合模式

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

  9. Java常用设计模式————组合模式

    引言 组合模式,是一种类似递归算法的结构性设计模式,通过以简单的 List ,组合本类对象,实现树状对象结构的"部分.整体"的层次. 它可以让调用程序不需要关心复杂对象与简单对象的 ...

最新文章

  1. asp.net webform 复制窗体代码_逆向分析流氓软件自我复制以及防御思路
  2. 关于滴滴智能调度的分析和思考
  3. SQLSERVER中统计所有表的记录数
  4. MFC中如何给对话框添加背景图片
  5. (王道408考研数据结构)第五章树-第四节4:红黑树基本概念及操作
  6. 【华为云专家技术公开课】7月4日直播,报名观看赢取好礼
  7. mysql cache lock_MySQL:query cache lock
  8. VueRouter(记录)
  9. c# mysql 汉字乱码_c#+mysql 中文乱码
  10. VS2017下载地址
  11. oracle if语句使用方法,Oracle IF语句的使用
  12. 明翰英语教学系列之句法篇V0.6(持续更新)
  13. [走过的路]联想时光——人艰不拆(店员篇+推销员篇)
  14. 远程桌面由于以下原因之一无法连接到远程计算机解决方法(亲测)
  15. php phalapi,[6.3]-SDK包(PHP版) | PhalApi(π框架) - PHP轻量级开源接口框架 - 接口,从简单开始!...
  16. java和ssm开发的医院体检预约系统有论文
  17. 数组的下标访问和指针访问方式效率分析比较
  18. Python数据分析与展示——Pandas基本操作
  19. 从安装包中提取wear OS手表端应用
  20. Python实现天气查询功能(外加Excel技巧)

热门文章

  1. win2003配置apache2.2下,php页面出现乱码的解决方法
  2. Android小项目源码汇总
  3. linux 知识点 随笔
  4. rfcomm工具的使用方法 创建/dev/rfcomm0 并检测
  5. 41 | 案例篇:如何优化 NAT 性能?(上)
  6. 38 | 案例篇:怎么使用 tcpdump 和 Wireshark 分析网络流量?
  7. python中webdriver_浅谈python中selenium库调动webdriver驱动浏览器的实现原理
  8. 1598: TomCat的环(快速幂+染色问题)
  9. mysql2012更改表名_SQL修改数据库名字、表名字、字段名字 | 学步园
  10. Dubbo 版 Swagger 来啦!