私はかなり単純なゲームエンジンを持っています。いくつかのシングルトンを使用します (それらのいくつかを列挙します)。
Resource Manager
Render Engine
Events Manager
Factory
etc
これらのシングルトンには、互いに多くの呼び出しがあります。Events Manager の使用例を取り上げます。
- Listener から派生した任意のオブジェクトは、このようにいくつかのイベントのリスナーとして itsel を追加できます
EventsManager->RegisterListener(this, &SomeClass::SomeMethod);
(イベント タイプは SomeMethod パラメータによって推定されます)。 - 他のオブジェクトは、このようなイベントを発生させることができます
EventsManager->PushEvent(SomeEvent);
いくつかの同期の後、イベントはすべてのリスナーに到達します。シングルトンの場合、これは EventsManager の非常に単純な使用法です。
同様の動作は、他のシングルトンにも当てはまります。シングルトンを削除したいのですが、私の主な問題は、現在のように「ユーザーの視点」からコードを使いやすくしたいということです。これを行うためのいくつかのテクニックを読みましたが、ほとんどの場合、クラスの初期化/使用がより複雑になります。このトピックが SO で何度も議論されたことは知っていますが、すべてをできるだけシンプルに保つという私のプログラミング哲学に適した答えはありません。
次のようなクラスの複雑な定義/初期化はしたくありません。
SomeClass<EventManager, RenderEngine,...>
また
SomeClass::SomeClass(EventsManager, RenderEngine...)
このトピックについてアドバイスをお願いできますか?