我有一个正在编写的 c++ (c++11) 库(一个 OpenGL 图形引擎)。
我的问题围绕着注册事件侦听器的良好编程技术。
我有这样的班级关系:
Program
--has--> SceneManager
--has--> ShaderManager
--has-->*Shader
该类Shader
允许其他对象将自己注册为ShaderBindListener
,这意味着只要着色器bind()
调用它的方法,它就会通知任何侦听器。
ShaderManager
类是外部库可以访问的类,它们可以从中创建新对象Shader
。
现在,我希望每个Shader
对象都将Program
对象作为 a ShaderBindListener
,以便在Shader
绑定a 时Program
通知该对象并且可以将矩阵数据等传递到Shader
GPU 上。
我最初的解决方案是让Program
对象将指向自身的指针传递给SceneManager
,后者将指针传递给ShaderManager
,然后存储它。每当Shader
创建一个新的时,都会将其ShaderManager
添加Program
为侦听器。
这工作得很好 - 但似乎 - 我不知道,在设计方面有点错误。
也许我只是在迂腐——但这对你们来说是不是很好的设计?