软件工程中的"General Hierarchy Pattern"是什么?

What is the "General Hierarchy Pattern" in software engineering?

我试图理解“一般层次结构模式”,但尽管我努力了,但仍然不清楚:

这个模式是从哪里来的?

这个问题引起了我的注意,因为模式的名称并没有响起,但评论中提供的元素强烈暗示了众所周知的 composite pattern 的一些变体。一些快速研究表明,这种模式在该名称下并不广为人知。似乎只有几本书描述了它:

我找不到任何引用此模式的学术文章,至少在那个名称下是这样。

一般的层次结构模式是什么?

更广为人知的composite pattern描述了一个通用的层次结构,其中一个组件可以由专门化该组件的节点的层次聚合组成,其中一些作为叶节点。这是一个非常通用的设计模式,涵盖了多种形式的层次结构。

但是,组合本身是更一般的“一般层次结构模式”的特化。根据 T.Lethbridge & R.Laganiere:

  • 抽象 Node 定义了特性并公开了层次结构中每个节点共有的接口。每个节点都可以有一个“上级”;
  • 一般节点至少有两个特化,SuperiorNodeNonSuperiorNode 取决于它们是否必须有下级(即是另一个节点的上级)。
  • 节点之间的关系可以是任何类型的关联(即不仅仅是组合中的聚合),具有可选对多(组合中的)或多对多的多样性

在 UML 中,这看起来像:

就个人而言,我对多对多上级有点困惑。以经理和员工为例,这看起来像一个矩阵,而矩阵不再是真正的层次结构。作者提到它是一个格子,但没有争论层次结构的相关性。

关于此模式的剩余问题

它用于表示任何一种层次结构。例如:

  • manager/employee 层次结构,经理可以对一组员工负责,其中一些员工本身就是经理,对一组员工负责。

  • department/employee 层次结构可以使用组合建模,因为部门由子部门组成,而子部门最终由人组成。

此模式的主要好处是抽象 Node 公开了一个可用于所有节点的接口。这有助于设计可以在层次结构中无缝导航的算法,而无需关心每个不同层次结构级别的特定细节。