2010-12-03 58 views
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繼承的問題。我急於重構此代碼以使其更易於維護和更小。

回答

4

取決於班級正在做什麼。如果它類似於迭代器模式(即std::vector<t>std::vector<t>::iterator),那麼它可以用於某些好的事情。另一方面,如果類正在做着根本不同的事情,那麼最好的做法是如果它們只使用它們的公共接口彼此暴露在一起。

換句話說,我不認爲它是一種模式或反模式 - 它完全取決於使用實際類的問題。

0

A和B緊密耦合,但它們的壽命可能不同。如果出現以下情況,可能需要將它們合併到一個類中:

  • A和B具有相同的壽命,所以一個總是與另一個一起存在。
  • 每個B實例總有一個A實例,反之亦然。

然而,情況可能並非如此。

鑑於A派生自X,B派生自Y,當我有共同耦合的類時,它通常是耦合的基類,並且每個類不與另一個類的實際具體類進行交互。

在這些情況下,它不是一個單一的生命週期關係,實際上我有一個主對象創建和加載較小的對象,這些對象返回給主設備獲取更多信息。

我不知道模式是否有名稱。我從來沒有對設計模式名稱感興趣。