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

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

前言

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


正文

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


由宏命令看组合模式

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

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


组合模式的用途

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

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


组合模式的实现

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

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

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


适用组合模式的场景

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

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

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


小结

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

目录
相关文章
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
40 2
|
4月前
|
设计模式 Java
Java设计模式:组合模式的介绍及代码演示
组合模式是一种结构型设计模式,用于将多个对象组织成树形结构,并统一处理所有对象。例如,统计公司总人数时,可先统计各部门人数再求和。该模式包括一个通用接口、表示节点的类及其实现类。通过树形结构和节点的通用方法,组合模式使程序更易扩展和维护。
Java设计模式:组合模式的介绍及代码演示
|
3月前
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
40 3
|
4月前
|
设计模式 存储 安全
Java设计模式-组合模式(13)
Java设计模式-组合模式(13)
|
5月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
70 1
|
5月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
6月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
96 7
|
6月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
79 6
|
6月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
60 6
|
6月前
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
87 0