私が書いているライブラリには、C++ の「強く相互依存する」クラスがいくつかあります。最初のクラスは「DataSet」で、その名前の由来と同様にデータを管理します。2 番目のクラスは「Renderer」で、DataSet にデータを描画します。どちらのクラスも抽象です。2つのクラス間で必要な「フロー」は次のとおりです。
アプリケーションは、実装された DataSet オブジェクト (DataSetImpA、B、C) を作成し、それらを実装された Renderer (RendererImp) に渡します。
アプリケーションは、レンダラーにカメラが向いている場所を伝えます。
Renderer は、DataSet がすべての関連オブジェクトを準備できるように、カメラ パラメータを使用して各 DataSet のプライベート 'update' メソッドを呼び出します。
Renderer は、プライベートな「get」メソッドを呼び出して、新しく準備されたオブジェクトを取得します。
Renderer は、プライベートな「クリア」メソッドを呼び出して、DataSet のオブジェクトを破棄することがあります。
「update」、「get」、および「clear」メソッドは、DataSet の純粋な仮想関数になります。フレンド クラスはここでは機能しません。実装をオープンにして、lib を使用する人のために拡張可能にしたいからです。「class x」が使用される実装に基づいて異なる場合に、誰かが「friend class x」と書くことを期待するのは悪いことです。
誰かが上記のようなものを実装する方法/設計パターンを提案できますか? 物事を行う別の方法も自由に提案してください