什么是最简单的事件设计模式

时间:2017-05-26 13:50:04

标签: c++ design-patterns

最近,我一直在思考以下问题。对于下面的代码,通过从Game类调用的Game::counter方法修改Event::Perform()的最简单方法是什么? 我考虑过Observer和Command设计模式,但似乎有一种更简单的方法可以做到这一点。

class Game
{
public:
    Game();
private:
    int counter;
    vector<Event*> Events;
};

class Event
{
public:
    virtual void Perform() = 0;
};

谢谢

1 个答案:

答案 0 :(得分:1)

直接来自Perform,没有。 counter是私有的,因此它只能由Game访问,作为其提供的接口的一个功能的一部分。

调用此函数只需访问正确的Game实例即可。您可以将该参数作为参数传递给Perform

virtual void Perform(Game &) = 0;

...或将其注入派生的Event s:

struct MyEvent : Event {
    MyEvent(Game &game) : _game{&game} { }

    void Perform() const override {
        // Do something with *game
    }

private:
    Game *_game;
};

由于我想我们正在讨论Event引用的Game::EventsGame本身将处理该参数,因此该参数看起来是最具凝聚力的方法。