我有两种客户端类型,即“ 观察者 ”类型和“ 主题 ”类型。它们都与组的层次结构相关联。
观察者将从不同层次中与其关联的组中接收(日历)数据。通过合并尝试收集数据的组的“父”组中的数据(每个组只能有一个父组)来计算此数据。
主题将能够在与其关联的组中创建数据(观察者将接收)。当在一个组中创建数据时,该组的所有“子级”也将拥有该数据,他们将能够为数据的特定区域制作自己的版本,但仍链接到创建的原始数据(在在我的特定实现中,原始数据将包含时间段和标题,而子组则为直接链接到其各自组的接收者指定其余数据。
但是,当主体创建数据时,必须检查所有受影响的观察者是否有与此冲突的数据,据我所知,这意味着庞大的递归功能。
因此,我认为这可以归纳为以下事实:我需要具有一个可以在其中上下移动的层次结构,并且某些地方必须能够将它们作为一个整体来对待(基本上是递归)。
另外,我不仅针对可行的解决方案。我希望找到一种相对容易理解的解决方案(至少在体系结构方面),并且足够灵活,以便将来能够轻松接收其他功能。
是否有解决此问题或类似层次结构问题的设计模式或良好实践?
编辑:
这是我的设计:
“ Phoenix”类以这种方式命名,因为我还没有想到合适的名称。
但是除此之外,我需要能够为特定的观察者隐藏特定的活动,即使这些活动通过组与之相连。
有点题外话:
就我个人而言,我认为我应该可以将这个问题分解为较小的问题,但这使我无所适从。我认为这是因为它涉及多个相互不关联的递归功能,以及需要以不同方式获取信息的不同客户端类型。我真的不能把头缠住它。如果有人能指导我如何更好地封装层次结构问题,我也将很高兴收到这一消息。
O(n)
算法来定义明确的数据结构,那么我可以解决这个问题。我看到您没有Group
在层次结构上添加任何变异方法。我是否可以假设这些是静态的?
n
度数为0 的唯一顶点,而每个其他顶点的度数至少为1?每个顶点都连接到n
吗?通往n
独特的道路吗?如果您可以列出数据结构的属性并将其操作抽象到接口(方法列表)上,我们(I)可能能够提出所述数据结构的实现。