# 设计模式——组合模式

组合:是指把一些零散的东西汇聚成一个整体,或者说把部分汇聚成整体。在开发中,组合模式同样如此。

# 组合模式的定义:

组合模式又称部分-整体模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。从组合模式的定义我们可以知道,组合模式有两个特点:

  1. 组合模式是部分与整体的层次关系,形成树形结构 组合模式的层次关系如下如图所示: 组合模式 从图中我们可以看到组合模式的整个结构是:一些叶子对象(也就是部分)组合成一级组合对象,这些组合对象又组合成一个组合对象,最终形成这种树形结构。
    我们以一个生活中实际的例子来举例: 组合模式 比如我们点餐,首先是整个菜单,然后菜单分为三类:主菜,饮料和甜品。每一类下面又进行划分,比如主菜包括土豆丝,西红柿炒鸡蛋,红烧牛肉等。这样形成了一个属性菜单。 另外,提到树形结构,我们学习的DOM树就是最常见的属性结构。
  2. 组合模式使得用户对单个对象和组合对象具有一致性。这句话怎么理解了,其实就是组合独享和单个对象都具有一些相同的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使用具有一致性。

# 组合模式总结:组合模式牢记两个特点:

  1. 组合对象之间能够形成树形结构
  2. 组合对象之间的API使用具有一致性。所谓一致性就是类似于同名函数。