需要帮助避免循环依赖

时间:2015-08-05 16:40:05

标签: c++ design-patterns

我正在制作游戏。我有一个Level类,它有一个Drawing对象的集合,并跟踪玩家在关卡中的位置。

主角(采用Drawing对象形式)需要能够在主角与另一个物体碰撞时停止水平移动。

class Level {
    ...
    Position offset;
    vector<Drawing*> drawings;
    ...
}

class MainCharacter : public Drawing {
    ...
    void onCollide(Drawing* other, Level& level) {
        level.stopMovement(); // prevent level from moving any further in that direction
    }
}

正如您所看到的,我的预期实现会导致循环依赖:Level有一个Drawings集合,需要引用Level才能阻止它。

是否有可以帮助我的设计模式?我已经研究过观察者和模型视图控制器模式了,但我不确定它们能在这里做多少好事。

我目前只是通过引用onCollide函数传递位置。

编辑:我意识到我有一个对象工厂,它正在复合循环依赖,因为它包含了Drawing .h,因此它可以创建Drawing对象。

因此,Level包括Factory和Drawing,Factory包括Drawing。绘图想要转发声明级别,但它需要访问其成员,因此它无法转发声明。

0 个答案:

没有答案