# 设计模式——组合模式
组合:是指把一些零散的东西汇聚成一个整体,或者说把部分汇聚成整体。在开发中,组合模式同样如此。
# 组合模式的定义:
组合模式又称部分-整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。从组合模式的定义我们可以知道,组合模式有两个特点:
- 组合模式是部分与整体的层次关系,形成树形结构
组合模式的层次关系如下如图所示:
从图中我们可以看到组合模式的整个结构是:一些叶子对象(也就是部分)组合成一级组合对象,这些组合对象又组合成一个组合对象,最终形成这种树形结构。
我们以一个生活中实际的例子来举例:比如我们点餐,首先是整个菜单,然后菜单分为三类:主菜,饮料和甜品。每一类下面又进行划分,比如主菜包括土豆丝,西红柿炒鸡蛋,红烧牛肉等。这样形成了一个属性菜单。 另外,提到树形结构,我们学习的DOM树就是最常见的属性结构。
- 组合模式使得用户对单个对象和组合对象具有一致性。这句话怎么理解了,其实就是组合独享和单个对象都具有一些相同的API(可以这么粗暴的理解),比如都定义成同名函数。 比如,我们以jQuery操作DOM为例。
<div class="wrap">
<span class="box"></span>
</div>
<script>
$('.wrap').css('color','red')
$('.wrap .box').css('color','green')
</script>
如上面代码所示:我们知道DOM结构是树形结构,同时使用jQuery
时,我们既可以对div
使用css
方法,又可以对div
的子元素使用css
方法,也就是说树型结构的组合和整体对象都能够使用相同的css方法。同样我们再以刚才的订餐举例:
从上面的图中我们可以看出,所有的对象无论是叶子对象还是组合对象都具有相同的add方法,也就是说这个结构的组合对象的API使用具有一致性。
# 组合模式总结:组合模式牢记两个特点:
- 组合对象之间能够形成树形结构
- 组合对象之间的API使用具有一致性。所谓一致性就是类似于同名函数。