相互的友谊和指针:这是什么模式或反模式?

时间:2010-12-03 22:21:58

标签: c++ design-patterns refactoring class-design friend

在研究大型应用程序的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 个答案:

答案 0 :(得分:4)

取决于课程的作用。如果它类似于迭代器模式(即std::vector<t>std::vector<t>::iterator),那么它可以用于好事。

另一方面,如果这些类做了根本不同的事情,那么最好只使用它们的公共接口彼此接触。

换句话说,我不认为这是一种模式或反模式 - 它完全取决于所讨论的实际类的使用。

答案 1 :(得分:0)

A和B紧密耦合,但它们的寿命可能不同。如果符合以下条件,可能值得制作一个类:

  • A和B具有相同的生命周期,因此总是与另一个一起存在。
  • 每个B实例总有一个实例,反之亦然。

但事实并非如此。

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

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

我不知道该模式是否有名称。我从未对设计模式名称感兴趣。