【JS设计模式】超值午餐——组合模式

62 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情

组合模式(Composite): 又称为 部分-整体模式, 将对象组合成树形结构以表示”部分整体“的层次结构。该模式使得用户对于单个对象和组合对象的使用具有一致性。

组合模式是一种 分区设计模式。 它的目的是将对象 组合成树形结构以此来表示部分整体的层次结构。 在组合模式中,我们将组成整体的一个个部分称为 集合, 集合中的每一项都可以保存其他集合本身,从而使得我们可以使用这种模式来创建一个深度嵌套的结构。组合模式要求我们可以像对待整个整体一样对待集合中任何单个对象,因此,我们要求 集合的接口要统一。

在JavaScript中,我们可以通过 继承同一个虚拟类 来实现接口的统一。比如说,因为是个树形结构,每个组合对象中都应该包含一个获取其子对象的方法 getChildren,同时还应该有一个移除子对象的方法 remove 和添加子对象的方法 add,因此我们可以写下下面的虚拟父类。

code.png

虚拟类通常是定义而不实现的。

组合需要有容器类

组合模式就像我们平时去吃的套餐,每一个套餐是一个整体,这个整体由很多个集合组成,而这些集合中,又是由很多的元素组合而成。所以我们还要实现一个容器类,这个容器类就是组成整体的一个个集合。

底层类

除了容器类,我们还需要创建一个个的底层类,这些底层类就是容器中的一个个元素, 底层类是不能有子成员的。

小结

组合模式更常用在创建表单模块上,我们只需要有基本的个体,然后通过一定的组合就可以实现各种表单模块了。

组合模式可以给我们提供一个清晰的 组成结构。 组合对象通过继承同一个父类实现了接口的一致性,而接口的一致性使得我们统一管理与使用组合对象变得更加便捷。同时,接口的一致性也使得单体成员与组合体成员的行为表现更具有一致性,模糊了简单对象与组合对象的区别。这也算是对数据的管理与使用。