最近,我一直在思考以下问题。对于下面的代码,通过从Game类调用的Game::counter
方法修改Event::Perform()
的最简单方法是什么?
我考虑过Observer和Command设计模式,但似乎有一种更简单的方法可以做到这一点。
class Game
{
public:
Game();
private:
int counter;
vector<Event*> Events;
};
class Event
{
public:
virtual void Perform() = 0;
};
谢谢
答案 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::Events
,Game
本身将处理该参数,因此该参数看起来是最具凝聚力的方法。