2010-12-03 8 views
3

大規模なアプリのC++ソースを学んで、私は(例えば構文は不完全かもしれないが、基本的な内容がある)、このパターンを見つける:お互いの友情と指針:これはどのようなパターンか反パターンですか?

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

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

おそらくクラスBが実際にあることを意味がありますAHelperという名前ですが、私はこの2つのクラス間のかなり対称的な関係についてもっと興味があります。これは、標準のGoFパターン、または確立されたアンチパターンの1つですか?細かいこと以外にも、概念よりも大きな概念や理解方法がありますか?

AとBを1つのクラスに結合することは意味がありますか?他のクラスX、Yから継承されている各クラスの問題があります。私はこのコードをよりメンテナンスしやすくするためにリファクタリングすることを熱望しています。

答えて

4

クラスが何をしているかによって異なります。イテレータパターン(例:std::vector<t>std::vector<t>::iterator)のようなものであれば、何か良いものに使うことができます。

一方、クラスが根本的に異なることを行っている場合は、公開インタフェースを使用して相互に公開されている場合が最もよいでしょう。

言い換えれば、私はパターンや反パターンではないと思います。実際のクラスの使用に完全に依存します。

0

AとBは密結合していますが、それらの寿命は異なる場合があります。

  • AとBは同じ寿命を持つため、1つは常に他のものと一緒に存在します。
  • 各Bインスタンスには常に1つのインスタンスが存在し、その逆もあります。

ただし、そうではない可能性があります。

AがXから派生し、BがYから派生しているとすれば、私は共同結合されたクラスを持つとき、それは通常結合される基本クラスであり、各クラスは他のクラスの実際のクラスと相互作用しません。

これらのケースでは、1つの生涯の関係ではありませんでした。実際は、詳細な情報を得るためにマスターに戻って小さなオブジェクトを作成して読み込む1つのマスターオブジェクトがあります。

パターンに名前があるかどうかわかりません。私は決してデザインパターンの名前を熱くしていません。

関連する問題