在我编写的特定程序中,我无法决定是使用函数指针还是观察者模式类。
有一个名为 Universe 的结构,可以运行n-body模拟。偶尔它的一些身体之间会发生一些碰撞,我想"听"对这些事件。我想出了两个选择:
声明当模拟结束碰撞时要调用的函数指针:
struct Universe
{
//... simulation stuff
//a "user-defined" callback when a collision occurs
void (*onCollision)(vector<Body*>& collidingList, Body& resultingMerger);
}
定义一个CollithListener类,由注册的&#34;听众&#34;并通知碰撞:
struct Universe
{
//... simulation stuff
//class to be derived
struct CollisionListener
{
//gets called when a collision occurs
virtual void onCollision(vector<Body>& collidingList, Body& resultingMerger)=0;
}
//list of registered listeners. onCollision() is called on each listener for each collision
vector<CollisionListener*> listeners;
}
第二种选择是否过度杀伤?当身体数量很多时,应该会有很多碰撞。