Aha!设计模式(54)-组合模式(1)

2019-04-13 13:54发布

意图   使用组合的方式管理下级要素,在实现一个树形数据结构的同时为各级节点提供相同的接口,使用者可以以相同的观点看待树上的每个节点。   动机
  现实世界中存在很多的树形结构,先看两个例子。首先是公司组织结构图:   接下来是电脑构成图: 通过观察可以发现,这两个例子中的树形结构具有以下的特征:
  1. 树上存在包含其他节点的父节点,也存在不包含其他节点的页子节点。
  2. 父节点和下级节点可以看作是整体和部分的关系
  3. 下级节点也有可能是其他节点的父节点。
  4. 这种包含关系可能会有很多层。
  5. 通常会存在一些共通操作,需要从父节点扩散到子节点。
最后一点图中没有体现,这里进行补充说明。所谓的共通操作,对于公司组织图来说,可以是发布通知,收集绩效数据,考评等;对于计算机来说可以是开关电源等。当然,实际需要哪种操作时根据需求决定的,但是一般的情况下都可以很容易地找出共通操作。 对于上面的树状结构建模时,一般的方法就是为每种要素设计一个类,但是这样一来有一个问题:包含其他要素的父节点类都有两个共通功能:一个是需要管理子节点,一个是要扩散操作。于是对类图进行优化,得到下面的类图。 在这个类图中PartsGroup承担了管理子节点和扩散共通操作的职责。它可以管理任何的Parts类,也包含另外的PartsGroup对象。这种组合关系可以根据需求多次重复。 这样一来,利用者就不必关心具体的节点类型,是否包含下级节点,有多少层下级节点,只管对眼前的节点调用其操作就好了。   觉得本文有帮助?请分享给更多人。 阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】