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