美文网首页
JS设计模式-其他2-组合模式 & 享元模式

JS设计模式-其他2-组合模式 & 享元模式

作者: 林海_Mense | 来源:发表于2019-03-22 00:18 被阅读0次

组合模式

概念
  • 生成树形结构,表示 “整体-部分”
  • 让整体和部分都具有一致的操作方式
    例如文件夹目录


    image.png

    虚拟DOM中的vnode是这种形式,但数据类型简单。

演示
 <div id="div1" class="container">
        <p>123</p>
        <p>456</p>
 </div>
 {
    tag: "div",
    attr: {
        id: "div1",
        className: "container"
    },
    children: [
       {
            tag: "p",
            attr: {},
            children: ["123"]
       },
       {
            tag: "p",
            attr: {},
            children: ["456"]
       },
    ]
}
其他

我们常用的菜单一般也是组合模式的

设计原则验证
  • 将整体和单个节点的操作抽象出来
  • 符合开放封闭原则

享元模式

概念
  • 共享内存(主要考虑内存,而非效率)
  • 相同的数据,共享使用
    前端的事件代理可以看成一个简单的例子
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <!-- 无限下拉列表,将事件代理到高层节点上 -->
    <!-- 如果都绑定到'<a>'标签,对内存开销太大,容易浏览器卡死 -->
    <div id="div1" class="container">
        <a href="#">a1</a>
        <a href="#">a2</a>
        <a href="#">a3</a>
        <a href="#">a4</a>
        <!-- ...无限下拉 -->
    </div>
</body>
<script>
    const div1 = document.querySelector("#div1");
    div1.addEventListener("click", (e) => {
        const target = e.target;
        if(target.nodeName === "A"){
            alert(target.innerHTML)
        }
    })
</script>
</html>
设计原则验证
  • 将相同的部分抽象出来(因为他们共享的数据一样,只用改一个地方)
  • 符合开放封闭原则

本文资料来自慕课网-双越老师-Javascript 设计模式系统讲解与应用视频课程

相关文章

  • JS设计模式-其他2-组合模式 & 享元模式

    组合模式 概念 生成树形结构,表示 “整体-部分” 让整体和部分都具有一致的操作方式例如文件夹目录image.pn...

  • 面试 (七) : 其他篇 -- 设计模式

    常用的设计模式 • 单例模式 • 组合模式 • 观察者模式 • 代理模式 • 享元模式 • 工厂方法模式 • 抽象...

  • iOS面试

    常用的设计模式 •单例模式 •组合模式 •观察者模式 •代理模式 •享元模式 •工厂方法模式 •抽象工厂模式 #M...

  • 6. iOS面试题其他篇1

    常用的设计模式 单例模式 组合模式 观察者模式 代理模式 享元模式 工厂方法模式 抽象工厂模式 MVC的理解 数据...

  • 好程序员Java培训​分享java设计模式之享元模式

    好程序员Java培训​分享java设计模式之享元模式,Java设计模式中的享元模式。享元模式有点类似于单例...

  • iOS面试题13-其他

    《2018 iOS面试题系列》 1.常用的设计模式 单例模式组合模式观察者模式代理模式享元模式工厂方法模式抽象工厂...

  • C++设计模式 Week3 (Boolan) by Im4lis

    1-单件模式 2-享元模式 3-状态模式 4-备忘录 5-组合模式 6-迭代器 使用面向对象实现性能较差。7-职责...

  • Java设计模式——享元模式

    Java设计模式之享元模式 这期跟大家聊的的设计模式是享元模式,该模式也是结构模式。 简介 利用共享的方式解决大量...

  • Java设计模式_享元模式

    点击链接跳转:设计模式——享元模式

  • 二十一、享元模式

    1. 何为享元模式 定义:通过共享已存在的对象,减少创建对象内存开销的设计模式被称为享元模式。 享元模式和单例模式...

网友评论

      本文标题:JS设计模式-其他2-组合模式 & 享元模式

      本文链接:https://www.haomeiwen.com/subject/mflkvqtx.html