c++ 监听模式跟状态机怎么结合 代码举例
时间: 2024-01-31 10:02:52 浏览: 25
在C++中,我们通常使用状态机来处理事件。监听模式可以用于实现状态机的事件监听器。下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <vector>
class EventListener {
public:
virtual void onEvent() = 0;
};
class StateMachine {
public:
enum State {
STATE_A,
STATE_B,
STATE_C
};
StateMachine() : m_state(STATE_A) {}
void addEventListener(EventListener* listener) {
m_listeners.push_back(listener);
}
void triggerEvent() {
for (auto listener : m_listeners) {
listener->onEvent();
}
switch (m_state) {
case STATE_A:
std::cout << "State A" << std::endl;
m_state = STATE_B;
break;
case STATE_B:
std::cout << "State B" << std::endl;
m_state = STATE_C;
break;
case STATE_C:
std::cout << "State C" << std::endl;
m_state = STATE_A;
break;
}
}
private:
State m_state;
std::vector<EventListener*> m_listeners;
};
class MyEventListener : public EventListener {
public:
virtual void onEvent() {
std::cout << "Event triggered" << std::endl;
}
};
int main() {
StateMachine stateMachine;
MyEventListener eventListener;
stateMachine.addEventListener(&eventListener);
for (int i = 0; i < 3; ++i) {
stateMachine.triggerEvent();
}
return 0;
}
```
上述代码中,`EventListener` 是一个抽象类,其中只有一个纯虚函数 `onEvent`。`MyEventListener` 类继承自 `EventListener`,并实现了 `onEvent` 函数。`StateMachine` 类是一个状态机,其中 `triggerEvent` 函数可以触发状态机的事件。在 `triggerEvent` 函数中,我们首先遍历注册到状态机的监听器,并调用它们的 `onEvent` 函数。然后根据当前状态改变状态机的状态。`main` 函数中,我们创建了一个状态机和一个事件监听器,并将监听器注册到状态机中。最后,我们通过调用 `triggerEvent` 函数来触发状态机的事件,从而改变状态。