互相友好和指针:这是什么设计模式或反模式?

3

在研究一个大型应用程序的C++源代码时,我发现了以下模式(示例中的语法可能有些草率,但关键细节都在其中):

class A  :  X
   friend B;
   B *parent;
   ...stuff...

class B  : Y
   friend A;
   A *myhelper;
   ...stuff...

或许将类B真正命名为AHelper是有意义的,但我更加好奇这两个类之间的对称关系。这是否是GoF模式中的一部分或者已经成为一种公认的反模式?除了细节以外,是否还有其他概念或理解方式可以看待这个问题,使整体大于部分?

将类A和类B合并成一个类是否有意义?每个类都继承自其他类X、Y,这是一个需要考虑的问题。我急于重构这段代码,使其更易于维护和更小巧。

2个回答

4
根据类的具体作用而定。如果是迭代器模式(即 std::vector 和 std::vector::iterator),则可以用于某些好的用途。
另一方面,如果这些类在从根本上做不同的事情,则最好只使用它们的公共接口来相互公开。
换句话说,我认为这不是一个模式或反模式 - 它完全取决于实际类的使用。

0

A和B紧密耦合,但它们的生命周期可能不同。如果满足以下条件,则将其制作成一个类可能是值得的:

  • A和B具有相同的生命周期,因此其中一个始终与另一个一起存在。
  • 每个B实例都有一个对应的A实例,反之亦然。

然而,这可能并非总是如此。

考虑到A派生自X,B派生自Y,当我有联合耦合的类时,通常是基类耦合,每个类不与另一个类的实际具体类交互。

在这些情况下,它不是单一的生命周期关系,实际上我有一个主对象,它创建和加载较小的对象,这些对象返回主对象以获取更多信息。

我不知道这种模式是否有名称。我从来没有热衷于设计模式的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接