你不知道的javascript设计模式(十) ---- 组合模式

简介: 你不知道的javascript设计模式(十) ---- 组合模式

前言

       同学们,上一章我们介绍了有关命令模式的知识,我们知道了命令模式拆分了命令和命令的执行,让发布者和执行者之间互不干涉,减少他们之间的耦合性,这一章我们将继续给大家一种新的设计模式,组合模式


正文

       宇宙中的很多东西都不仅仅是一个个体,人由很多器官构成,很多器官又由细胞构成,细胞中又包含各种各样的原子,原子又由原子核组成,这就是一种组合模式的体现,下面我们正式开始组合模式的学习


由宏命令看组合模式

       在上一章命令模式我们就介绍了宏命令,宏命令是一个包含了一组命令的对象,现在我们来稍微回顾一下昨天做咖啡的那个例子:

       我们不难发现,这段宏命令呈现的是一个树状结构,这是一颗结构非常简单的树,其中macroCommand称为组合对象,装入咖啡豆这些命令是这段宏命令的叶子节点,其实这就是一个简单的组合模式的体现。


组合模式的用途

       组合模式将对象组合成树状结构,来表示“部分-整体”的一个结构。对于组合模式而言,我们利用它不仅可以达到构建一个树状结构的作用,还可以用它来表现对象的多态性,使得宏命令与单一命令一致,用户并不用在意这是宏命令还是单一的一个命令,就像用户只在意喝到咖啡,而并不在意做出咖啡中间包含了多少步,是一步做出来的还是很多步做出来的,这些都无关紧要

       这个例子相对还是比较简单,我们还不能通过它来领悟组合对象的优势,树状结构的叶子结构也许并不只有一层,也可能是一颗有很多层的复杂的树,这时候组合模式的作用就可以得到展现


组合模式的实现

       下面我们将就一具体的例子具体说明组合模式的实现,我们的电脑硬盘存取了数以万计的文件夹,每个文件夹中可能又有其他的文件和文件夹,不难理解,这其实是一个复杂且巨大的树状结构,用组合模式去实现这个场景有两大好处:

  • 当我们复制文件或者删除文件的时候不需要考虑文件类型,以及其中是否包括了文件,对它进行操作,自己就会按照树状结构的规则去往下遍历删除
  • 当我们遍历这个树状结构的时候,不需要考虑里面有多少文件,只需要从根节点文件开始遍历就行

       这样一个简易的硬盘文件系统就利用组合模式设计好了


适用组合模式的场景

       组合模式如果运用妥当,可以大大简化代码,组合模式主要是适用于以下场景:

  • 业务逻辑可以表现为明显的树状结构,并且树叶节点有相同的特点不会有明显的特殊化差异
  • 希望统一处理业务中的对象,一视同仁的处理,在面对这棵树的时候,不需要考虑节点是否是叶子节点,可以一视同仁地处理

       滥用组合模式也会有明显的缺陷,将会导致系统中的对象看起来都差不多,不仅如此,组合模式还会创建过多的对象,导致系统的负担加重,所以在应用的时候需要仔细分析是否满足上面条件适合使用组合模式


小结

       这一章节我们介绍了组合模式,组合模式是一种基于树状结构的设计模式,弱化了每种对象之间的不同,将他们可以一视同仁的处理,使得用户不再需要去考虑操作对象的特殊性

目录
相关文章
|
6月前
|
设计模式 Java 定位技术
【设计模式】【结构型模式】组合模式(Composite)
一、入门 什么是组合模式 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次关系。组合模式使得客户端可以统一处理单个对象和组合对
212 10
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
291 124
|
9月前
|
设计模式 存储 安全
「全网最细 + 实战源码案例」设计模式——组合模式
组合模式(Composite Pattern)是一种结构型设计模式,用于将对象组合成树形结构以表示“部分-整体”的层次结构。它允许客户端以一致的方式对待单个对象和对象集合,简化了复杂结构的处理。组合模式包含三个主要组件:抽象组件(Component)、叶子节点(Leaf)和组合节点(Composite)。通过这种模式,客户端可以统一处理简单元素和复杂元素,而无需关心其内部结构。适用于需要实现树状对象结构或希望以相同方式处理简单和复杂元素的场景。优点包括支持树形结构、透明性和遵循开闭原则;缺点是可能引入不必要的复杂性和过度抽象。
275 22
|
9月前
|
设计模式 JavaScript 算法
浅谈几种js设计模式
设计模式是软件开发中的宝贵工具,能够提高代码的可维护性和扩展性。通过单例模式、工厂模式、观察者模式和策略模式,我们可以解决不同场景下的实际问题,编写更加优雅和高效的代码。
264 8
|
12月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
171 2
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
199 2
Java设计模式:组合模式的介绍及代码演示
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)
153 2
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
267 1
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
182 6