私が書いている c++ (c++11) ライブラリ (OpenGL グラフィック エンジン) があります。
私の質問は、イベント リスナーを登録するための優れたプログラミング手法に関するものです。
私は次のようなクラス関係を持っています:
Program
--has--> SceneManager
--has--> ShaderManager
--has-->*Shader
このShader
クラスにより、他のオブジェクトが自身を として登録できるようになりますShaderBindListener
。つまり、シェーダーでそのbind()
メソッドが呼び出されるたびに、リスナーに通知されます。
ShaderManager
クラスは、外部ライブラリがアクセスできるクラスであり、そこから新しいオブジェクトを作成できますShader
。
ここで、各オブジェクトにオブジェクトを としてShader
持たせて、 aがバインドされたときにオブジェクトに通知し、行列データなどをGPU に渡すことができるようにします。Program
ShaderBindListener
Shader
Program
Shader
私の最初の解決策は、Program
オブジェクトがそれ自体へのポインタを にSceneManager
渡し、それがポインタを に渡し、ShaderManager
それを格納することでした。Shader
新しいが作成されるたびに、はをリスナーとしてShaderManager
追加します。Program
これは問題なく動作しますが、設計に関しては少し間違っているようです。
多分私は衒学的なだけかもしれません-しかし、これはあなたにとって良いデザインのように思えますか?