私は小さなRPGゲームを作成しており、オブジェクト間のイベント駆動型通信のための一種のオブザーバーデザインパターンを実装しました。リスナーを登録し、新しいイベントを受け入れ、イベントをディスパッチするEventManagerがあります。問題は、イベントを送受信する必要があるすべてのオブジェクトが、addEvent()またはregister()を呼び出すためにEventManagerのインスタンスを必要とすることです。私のプログラムのほとんどすべてのオブジェクトがこのシステムを使用しているので(結合を減らし、データ変更エラーを回避するために)、それにアクセスするための良い方法が必要です。
現在、コンストラクターとメソッド内の多数のオブジェクトへの参照を明示的に渡していますが、スケールが大きくなるにつれて、これは厄介になります。特に、キャラクターのようなオブジェクトでそれが必要になり始めており、キャラクターはゲーム内で構築されていないためです。それらはデータファイルから逆シリアル化されます。
グローバル変数は一般的に悪い設計であることを私は知っていますが、これらは私が見ることができるオプションであり、それらはすべて批判されています:
a)EventManagerのすべてのフィールドとメソッドを静的にする
b)シングルトンデザインを採用する
c)パブリック静的EventManagerを作成します
何か案は?ありがとう